diff --git a/.copilot-tracking/changes/20250101-custom-blocks-implementation-changes.md b/.copilot-tracking/changes/20250101-custom-blocks-implementation-changes.md deleted file mode 100644 index d2012e2b4..000000000 --- a/.copilot-tracking/changes/20250101-custom-blocks-implementation-changes.md +++ /dev/null @@ -1,52 +0,0 @@ - -# Release Changes: Custom Blocks Feature Implementation - -**Related Plan**: `prompts/CUSTOM-BLOCKS.md` -**Implementation Date**: 2025-01-01 - -## Summary - -Implemented the Custom Blocks feature for Melodee, allowing administrators to add custom Markdown content blocks to authentication pages (login, register, forgot-password, reset-password). The implementation follows a security-first approach with strict key validation, HTML sanitization, and automatic caching with file-based invalidation. - -## Changes - -### Added - -- `src/Melodee.Blazor/Services/CustomBlocks/CustomBlocksOptions.cs` - Configuration class -- `src/Melodee.Blazor/Services/CustomBlocks/CustomBlockResult.cs` - Result record -- `src/Melodee.Blazor/Services/CustomBlocks/ICustomBlockService.cs` - Service interface -- `src/Melodee.Blazor/Services/CustomBlocks/FileCustomBlockService.cs` - Main implementation (166 lines) -- `src/Melodee.Blazor/Services/CustomBlocks/MarkdownRenderer.cs` - Markdig wrapper with DisableHtml() -- `src/Melodee.Blazor/Services/CustomBlocks/HtmlSanitizerService.cs` - HTML sanitizer with strict allow-list -- `src/Melodee.Blazor/Components/CustomBlock.razor` - Blazor rendering component -- `tests/Melodee.Tests.Blazor/Services/CustomBlocks/FileCustomBlockServiceTests.cs` - Test suite (37 tests) - -### Modified - -- `src/Melodee.Blazor/Components/Pages/Account/Login.razor` - Injected custom block slots -- `src/Melodee.Blazor/Components/Pages/Account/Register.razor` - Injected custom block slots -- `src/Melodee.Blazor/Components/Pages/Account/ForgotPassword.razor` - Injected custom block slots -- `src/Melodee.Blazor/Components/Pages/Account/ResetPassword.razor` - Injected custom block slots -- `src/Melodee.Blazor/appsettings.json` - Added CustomBlocks configuration section -- `src/Melodee.Blazor/Program.cs` - Added DI registration for custom blocks services - -## Release Summary - -**Total Files Affected**: 13 -**Files Created**: 8 -**Files Modified**: 5 -**Files Removed**: 0 - -### Security Features -- Key validation regex prevents path traversal -- Max file size 256KB (configurable) -- Markdown DisableHtml() prevents raw HTML -- Strict HTML sanitization allow-list -- Cache invalidation on file timestamp change - -### Testing -✅ All 37 unit tests passing -✅ Solution builds with 0 errors - -### Deployment -Requires `MELODEE_DATA_DIR` environment variable for custom blocks directory resolution. diff --git a/.github/collections/csharp-dotnet-development.collection.yml b/.github/collections/csharp-dotnet-development.collection.yml deleted file mode 100644 index 4de79aacd..000000000 --- a/.github/collections/csharp-dotnet-development.collection.yml +++ /dev/null @@ -1,24 +0,0 @@ -id: csharp-dotnet-development -name: C# .NET Development -description: Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. -tags: [csharp, dotnet, aspnet, testing] -items: - - path: prompts/csharp-async.prompt.md - kind: prompt - - path: prompts/aspnet-minimal-api-openapi.prompt.md - kind: prompt - - path: instructions/csharp.instructions.md - kind: instruction - - path: instructions/dotnet-architecture-good-practices.instructions.md - kind: instruction - - path: agents/expert-dotnet-software-engineer.agent.md - kind: agent - - path: prompts/csharp-xunit.prompt.md - kind: prompt - - path: prompts/dotnet-best-practices.prompt.md - kind: prompt - - path: prompts/dotnet-upgrade.prompt.md - kind: prompt -display: - ordering: alpha - show_badge: false diff --git a/.github/collections/csharp-dotnet-development.md b/.github/collections/csharp-dotnet-development.md deleted file mode 100644 index c6b07f7e1..000000000 --- a/.github/collections/csharp-dotnet-development.md +++ /dev/null @@ -1,18 +0,0 @@ -# C# .NET Development - -Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. - -**Tags:** csharp, dotnet, aspnet, testing - -## Items in this Collection - -| Title | Type | Description | MCP Servers | -| ----- | ---- | ----------- | ----------- | -| [.NET Upgrade Analysis Prompts](../prompts/dotnet-upgrade.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-upgrade.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-upgrade.prompt.md) | Prompt | Ready-to-use prompts for comprehensive .NET framework upgrade analysis and execution | | -| [.NET/C# Best Practices](../prompts/dotnet-best-practices.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-best-practices.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-best-practices.prompt.md) | Prompt | Ensure .NET/C# code meets best practices for the solution/project. | | -| [ASP.NET Minimal API with OpenAPI](../prompts/aspnet-minimal-api-openapi.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Faspnet-minimal-api-openapi.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Faspnet-minimal-api-openapi.prompt.md) | Prompt | Create ASP.NET Minimal API endpoints with proper OpenAPI documentation | | -| [C# Async Programming Best Practices](../prompts/csharp-async.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-async.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-async.prompt.md) | Prompt | Get best practices for C# async programming | | -| [C# Development](../instructions/csharp.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcsharp.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcsharp.instructions.md) | Instruction | Guidelines for building C# applications | | -| [DDD Systems & .NET Guidelines](../instructions/dotnet-architecture-good-practices.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-architecture-good-practices.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-architecture-good-practices.instructions.md) | Instruction | DDD and .NET architecture guidelines | | -| [Expert .NET software engineer mode instructions](../agents/expert-dotnet-software-engineer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md) | Agent | Provide expert .NET software engineering guidance using modern software design patterns. | | -| [XUnit Best Practices](../prompts/csharp-xunit.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-xunit.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-xunit.prompt.md) | Prompt | Get best practices for XUnit unit testing, including data-driven tests | | diff --git a/.github/collections/testing-automation.collection.yml b/.github/collections/testing-automation.collection.yml deleted file mode 100644 index 1e1eeb895..000000000 --- a/.github/collections/testing-automation.collection.yml +++ /dev/null @@ -1,39 +0,0 @@ -id: testing-automation -name: Testing & Test Automation -description: Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. -tags: - [testing, tdd, automation, unit-tests, integration, playwright, xunit] -items: - # TDD Chat Modes - - path: agents/tdd-red.agent.md - kind: agent - - path: agents/tdd-green.agent.md - kind: agent - - path: agents/tdd-refactor.agent.md - kind: agent - - path: agents/playwright-tester.agent.md - kind: agent - - # Testing Instructions - - path: instructions/playwright-typescript.instructions.md - kind: instruction - - path: instructions/playwright-python.instructions.md - kind: instruction - - path: instructions/playwright-dotnet.instructions.md - kind: instruction - - # Testing Prompts - - path: prompts/playwright-explore-website.prompt.md - kind: prompt - - path: prompts/playwright-generate-test.prompt.md - kind: prompt - - path: prompts/csharp-xunit.prompt.md - kind: prompt - - path: prompts/java-junit.prompt.md - kind: prompt - - path: prompts/ai-prompt-engineering-safety-review.prompt.md - kind: prompt - -display: - ordering: alpha - show_badge: true diff --git a/.github/collections/testing-automation.md b/.github/collections/testing-automation.md deleted file mode 100644 index ce57433e4..000000000 --- a/.github/collections/testing-automation.md +++ /dev/null @@ -1,24 +0,0 @@ -# Testing & Test Automation - -Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. - -**Tags:** testing, tdd, automation, unit-tests, integration, playwright, jest, nunit - -## Items in this Collection - -| Title | Type | Description | MCP Servers | -| ----- | ---- | ----------- | ----------- | -| [AI Prompt Engineering Safety Review & Improvement](../prompts/ai-prompt-engineering-safety-review.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fai-prompt-engineering-safety-review.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fai-prompt-engineering-safety-review.prompt.md) | Prompt | Comprehensive AI prompt engineering safety review and improvement prompt. Analyzes prompts for safety, bias, security vulnerabilities, and effectiveness while providing detailed improvement recommendations with extensive frameworks, testing methodologies, and educational content. | | -| [JUnit 5+ Best Practices](../prompts/java-junit.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-junit.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-junit.prompt.md) | Prompt | Get best practices for JUnit 5 unit testing, including data-driven tests | | -| [NUnit Best Practices](../prompts/csharp-nunit.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-nunit.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-nunit.prompt.md) | Prompt | Get best practices for NUnit unit testing, including data-driven tests | | -| [Playwright Python Test Generation Instructions](../instructions/playwright-python.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fplaywright-python.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fplaywright-python.instructions.md) | Instruction | Playwright Python AI test generation instructions based on official documentation. | | -| [Playwright Tester Mode](../agents/playwright-tester.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplaywright-tester.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplaywright-tester.agent.md) | Agent | Testing mode for Playwright tests | | -| [Playwright Typescript](../instructions/playwright-typescript.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fplaywright-typescript.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fplaywright-typescript.instructions.md) | Instruction | Playwright test generation instructions | | -| [TDD Green Phase Make Tests Pass Quickly](../agents/tdd-green.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-green.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-green.agent.md) | Agent | Implement minimal code to satisfy GitHub issue requirements and make failing tests pass without over-engineering. | | -| [TDD Red Phase Write Failing Tests First](../agents/tdd-red.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-red.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-red.agent.md) | Agent | Guide test-first development by writing failing tests that describe desired behaviour from GitHub issue context before implementation exists. | | -| [TDD Refactor Phase Improve Quality & Security](../agents/tdd-refactor.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-refactor.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftdd-refactor.agent.md) | Agent | Improve code quality, apply security best practices, and enhance design whilst maintaining green tests and GitHub issue compliance. | | -| [Test Generation with Playwright MCP](../prompts/playwright-generate-test.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fplaywright-generate-test.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fplaywright-generate-test.prompt.md) | Prompt | Generate a Playwright test based on a scenario using Playwright MCP | | -| [Website Exploration for Testing](../prompts/playwright-explore-website.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fplaywright-explore-website.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fplaywright-explore-website.prompt.md) | Prompt | Website exploration for testing using Playwright MCP | | - ---- -*This collection includes 11 curated items for **Testing & Test Automation**.* \ No newline at end of file diff --git a/.github/instructions/docker.instructions.md b/.github/instructions/docker.instructions.md index 90f65d9ac..41aeb0706 100644 --- a/.github/instructions/docker.instructions.md +++ b/.github/instructions/docker.instructions.md @@ -95,7 +95,7 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ - Include maintainer and version information ```dockerfile -LABEL org.opencontainers.image.source="https://github.com/owner/melodee" +LABEL org.opencontainers.image.source="https://github.com/melodee-project/melodee" LABEL org.opencontainers.image.description="Melodee music server" LABEL org.opencontainers.image.version="1.0.0" ``` diff --git a/.github/instructions/task-implementation.instructions.md b/.github/instructions/task-implementation.instructions.md index af12b302f..b1490c119 100644 --- a/.github/instructions/task-implementation.instructions.md +++ b/.github/instructions/task-implementation.instructions.md @@ -1,13 +1,12 @@ --- -applyTo: '**/.copilot-tracking/changes/*.md' -description: 'Instructions for implementing task plans with progressive tracking and change record - Brought to you by microsoft/edge-ai' +description: 'Instructions for implementing task plans with progressive tracking and change records' --- # Task Plan Implementation Instructions -You will implement your specific task plan located in `.copilot-tracking/plans/**` and `.copilot-tracking/details/**`. Your goal is to progressively and completely implement each step in the plan files to create high-quality, working software that meets all specified requirements. +You will implement task plans progressively, tracking changes as you work. Your goal is to systematically implement each step in the plan to create high-quality, working software that meets all specified requirements. -Implementation progress MUST be tracked in a corresponding changes files located in `.copilot-tracking/changes/**`. +Implementation progress should be tracked by updating the plan file as tasks are completed. ## Core Implementation Process @@ -26,7 +25,7 @@ Implementation progress MUST be tracked in a corresponding changes files located 1. **Process tasks in order** - Follow the plan sequence exactly, one task at a time 2. **MANDATORY before implementing any task:** - **ALWAYS ensure implementation is associated with a specific task from the plan** - - **ALWAYS read the entire details section for that task from the associated details markdown file in `.copilot-tracking/details/**`** + - **ALWAYS read the entire details section for that task from the associated task details or requirements document** - **FULLY understand all implementation details before proceeding** - Gather any additional required context as needed @@ -44,7 +43,7 @@ Implementation progress MUST be tracked in a corresponding changes files located ### 3. Implementation Quality Standards **Every implementation MUST:** -- Follow existing workspace patterns and conventions (check `copilot/` folder for standards) +- Follow existing workspace patterns and conventions (check `.github/instructions/` and `.kilo/` for standards) - Implement complete, working functionality that meets all task requirements - Include appropriate error handling and validation - Use consistent naming conventions and code structure from the workspace @@ -129,7 +128,7 @@ Implementation is complete when: ## Template Changes File Use the following as a template for the changes file that tracks implementation progress for releases. -Replace `{{ }}` with appropriate values. Create this file in `./.copilot-tracking/changes/` with filename: `YYYYMMDD-task-description-changes.md` +Replace `{{ }}` with appropriate values. Create this file in `./design/docs/` with filename: `YYYYMMDD-task-description-changes.md` **IMPORTANT**: Update this file after EVERY task completion by appending to Added, Modified, or Removed sections. **MANDATORY**: Always include the following at the top of the changes file: `` diff --git a/.kilo/agent/melodee-developer.md b/.kilo/agent/melodee-developer.md new file mode 100644 index 000000000..12a0804c0 --- /dev/null +++ b/.kilo/agent/melodee-developer.md @@ -0,0 +1,53 @@ +--- +description: Melodee .NET developer — follows .github/instructions/ for all code changes +mode: primary +steps: 30 +--- +You are a senior .NET/C# developer working on the Melodee music server project. + +## Project Context +- **Framework**: .NET 10, C# 13 +- **UI**: Blazor Server with Radzen components +- **Database**: PostgreSQL via EF Core with DecentDB +- **Architecture**: Service layer pattern, DI-heavy, async-first +- **Key features**: Party Mode, Jukebox, OpenSubsonic API, Podcast support, MQL + +## Mandatory Pre-Change Checklist +Before any code change: +1. Read the relevant `.github/instructions/*.md` file(s) for the area you're modifying +2. Follow `csharp.instructions.md` for all C# code +3. Follow `blazor.instructions.md` for Blazor components +4. Follow `security-and-owasp.instructions.md` for auth/security/input handling +5. Follow `performance-optimization.instructions.md` for DB queries or hot paths +6. Follow `self-explanatory-code-commenting.instructions.md` — comment WHY, not WHAT +7. Follow `dependency-injection.instructions.md` for service registration + +## Coding Standards +- Async-first: all I/O must be async (no .Result, .Wait(), or GetAwaiter().GetResult()) +- Use `ConfigureAwait(false)` in library code (Melodee.Common) +- Prefer `await using` for scoped DbContext +- Use `.AsNoTracking()` for read-only queries +- Use `.AsSplitQuery()` for queries with multiple Includes +- Guard clauses at method entry (Ardalis.GuardClauses) +- Return `OperationResult` for service methods that can fail +- Use structured logging (Serilog), never Console.WriteLine + +## Testing +- Follow `testing.instructions.md` +- Use `MELODEE_SKIP_DB_REGISTRATION=true` for integration tests +- Set QuartzDisabled=true in test environments +- Required test env vars: ConnectionStrings, Jwt config, security keys + +## Build & CI +- `dotnet restore && dotnet build --no-restore` +- `dotnet format --verify-no-changes --no-restore --verbosity quiet` +- `dotnet test --no-build --verbosity normal` +- CI validates: build, format, analyzers, localization, OpenSubsonic matrix + +## Key Conventions +- Services inherit from ServiceBase +- Controllers extend ControllerBase (Melodee's base, not ASP.NET's) +- Blazor components inherit MelodeeComponentBase +- Use `@L("key")` for localization in Blazor +- Configuration via IMelodeeConfigurationFactory, never direct IConfiguration in services +- Cache keys use CacheKeyDetailByApiKeyTemplate/CacheKeyDetailTemplate patterns diff --git a/.kilo/command/build.md b/.kilo/command/build.md new file mode 100644 index 000000000..cbed3c8e8 --- /dev/null +++ b/.kilo/command/build.md @@ -0,0 +1,11 @@ +--- +description: Build the Melodee solution +--- +Build the Melodee .NET solution. + +Run: +```bash +dotnet restore && dotnet build --no-restore +``` + +Report any warnings or errors. If the build succeeds, confirm which projects were built. diff --git a/.kilo/command/coverage.md b/.kilo/command/coverage.md new file mode 100644 index 000000000..9076d71ed --- /dev/null +++ b/.kilo/command/coverage.md @@ -0,0 +1,24 @@ +--- +description: Generate code coverage report +--- +Run tests with code coverage and generate a report. + +Required environment variables: +```bash +export ConnectionStrings__DefaultConnection="Host=localhost;Database=melodee_test;Username=test;Password=test" +export ConnectionStrings__ArtistSearchEngineConnection="Data Source=:memory:" +export ConnectionStrings__MusicBrainzConnection="Data Source=:memory:" +export Jwt__Key="testkeytestkeytestkeytestkeytestkeytestkeytestkeytestkey" +export Jwt__Issuer="test" +export Jwt__Audience="test" +export security__secretKey="testsecretkeytestsecretkeytestsecretkey" +export QuartzDisabled="true" +``` + +Run: +```bash +dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --settings coverage.runsettings --results-directory coverage/results +dotnet tool install -g dotnet-reportgenerator-globaltool 2>/dev/null || true +reportgenerator -reports:"coverage/results/**/coverage.cobertura.xml" -targetdir:"coverage/report" -reporttypes:"Html;TextSummary" -assemblyfilters:"+Melodee.*;+server;+mcli;-Melodee.Tests.*" +cat coverage/report/Summary.txt +``` diff --git a/.kilo/command/lint.md b/.kilo/command/lint.md new file mode 100644 index 000000000..555467b13 --- /dev/null +++ b/.kilo/command/lint.md @@ -0,0 +1,12 @@ +--- +description: Run code formatting and analyzer checks +--- +Run formatting verification and code analyzer checks (mirrors CI pipeline). + +```bash +dotnet restore +dotnet format --verify-no-changes --no-restore --verbosity quiet +dotnet build --no-restore -c Release /p:EnforceCodeStyleInBuild=true /p:TreatWarningsAsErrors=false +``` + +Report any formatting issues or analyzer warnings that need fixing. diff --git a/.kilo/command/migrate.md b/.kilo/command/migrate.md new file mode 100644 index 000000000..9b56dde27 --- /dev/null +++ b/.kilo/command/migrate.md @@ -0,0 +1,12 @@ +--- +description: Create a new EF Core migration +--- +Create a new EF Core migration for the Melodee database. + +Usage: `/migrate ` + +```bash +dotnet ef migrations add $1 --project src/Melodee.Common/Melodee.Common.csproj --startup-project src/Melodee.Blazor/Melodee.Blazor.csproj +``` + +After creating the migration, review the generated Up/Down methods for correctness. diff --git a/.kilo/command/test-mql.md b/.kilo/command/test-mql.md new file mode 100644 index 000000000..09196f687 --- /dev/null +++ b/.kilo/command/test-mql.md @@ -0,0 +1,10 @@ +--- +description: Run MQL-specific tests only +--- +Run only the MQL (Melodee Query Language) test suite. + +```bash +dotnet test tests/Melodee.Mql.Tests/Melodee.Mql.Tests.csproj --no-build --verbosity normal +``` + +Report results focusing on MQL parsing, execution, and metrics tests. diff --git a/.kilo/command/test.md b/.kilo/command/test.md new file mode 100644 index 000000000..4bcadddc2 --- /dev/null +++ b/.kilo/command/test.md @@ -0,0 +1,23 @@ +--- +description: Run all unit tests +--- +Run all Melodee unit tests. + +Required environment variables for test execution: +```bash +export ConnectionStrings__DefaultConnection="Host=localhost;Database=melodee_test;Username=test;Password=test" +export ConnectionStrings__ArtistSearchEngineConnection="Data Source=:memory:" +export ConnectionStrings__MusicBrainzConnection="Data Source=:memory:" +export Jwt__Key="testkeytestkeytestkeytestkeytestkeytestkeytestkeytestkey" +export Jwt__Issuer="test" +export Jwt__Audience="test" +export security__secretKey="testsecretkeytestsecretkeytestsecretkey" +export QuartzDisabled="true" +``` + +Run: +```bash +dotnet test --no-build --verbosity normal +``` + +Report test results including pass/fail counts and any failures with details. diff --git a/Directory.Build.props b/Directory.Build.props index 9949ef02c..64259da25 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,9 @@ true + + $(NoWarn);NU1902 diff --git a/Directory.Packages.props b/Directory.Packages.props index 6629bd804..f0ca61a7a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,21 +8,21 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + - + @@ -33,50 +33,50 @@ - + - - - - - - - - - - - + + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + + + + + + + + - + - + - + @@ -84,10 +84,10 @@ - + - + @@ -97,7 +97,8 @@ - + + @@ -106,11 +107,11 @@ - + - + all @@ -119,4 +120,4 @@ - + \ No newline at end of file diff --git a/docs/VERSION b/docs/VERSION index 38f77a65b..7ec1d6db4 100644 --- a/docs/VERSION +++ b/docs/VERSION @@ -1 +1 @@ -2.0.1 +2.1.0 diff --git a/docs/_posts/2026-05-24-melodee-2-1-0-released.md b/docs/_posts/2026-05-24-melodee-2-1-0-released.md new file mode 100644 index 000000000..0b32079e6 --- /dev/null +++ b/docs/_posts/2026-05-24-melodee-2-1-0-released.md @@ -0,0 +1,76 @@ +--- +title: "Melodee 2.1.0 Released" +date: 2026-05-24 +badges: + - type: info + tag: release +--- + +Melodee 2.1.0 is here! This release focuses on performance, developer experience, and security hardening — making your server faster to load, easier to maintain, and safer to run. + + + +## What's New in 2.1.0 + +### SkiaSharp Image Processing +All image processing has migrated from `SixLabors.ImageSharp` to `SkiaSharp`, replacing the legacy library with a more performant and actively maintained alternative. + +- New `IImageProcessor` abstraction for decode, encode, resize, format detection, and hash generation +- Clean dependency injection throughout services, Blazor components, CLI commands, and tests +- Conditional native asset inclusion (`SkiaSharp.NativeAssets.Linux` on Linux) — no extra runtime dependencies needed + +### Dashboard Performance +Page loads are faster and feel more responsive thanks to targeted optimizations. + +- Dashboard data loading now occurs in `OnAfterRenderAsync` — skeleton placeholders render immediately instead of blocking the initial page paint +- `DoctorService.NeedsAttentionAsync` fast path uses lightweight file-existence checks, cutting dashboard first-render time by ~5 seconds + +### Bulk Delete Performance +Deleting large collections is now significantly faster. + +- `SongService`, `AlbumService`, and `ArtistService` batch-load entities in a single query instead of executing N+1 queries per item +- Dramatic speed improvements for cleaning up large libraries + +### Party Mode Optimization +Party Mode has been refactored for direct in-process performance. + +- `PartyModeService` now calls domain services (`PartySessionService`, `PartyQueueService`, `PartyPlaybackService`, `PartySessionEndpointRegistryService`) directly via dependency injection instead of making HTTP requests to the same application +- Eliminates ~20 HTTP round-trips per user interaction (create, join, leave, queue, playback, endpoints) +- User identity resolved through `IAuthService` rather than cookie authentication + +### Developer Experience +Building and maintaining Melodee is now easier for contributors. + +- Squashed 55 EF Core database migrations into a single `InitialBaseline` migration — smaller repository, faster CI builds, no fragile migration chains +- Quartz job scheduling extracted into a reusable helper, shrinking `Program.cs` from 1,046 to ~860 lines +- `.kilo/` project configuration with slash commands (`/build`, `/test`, `/test-mql`, `/lint`, `/migrate`, `/coverage`) and a `melodee-developer` agent for consistent workflows +- CodeQL analysis optimized — JavaScript/TypeScript scanning dropped, saving 5–10 minutes per CI run + +### Security Hardening + +- Password reset endpoint no longer exposes reset tokens in API responses. Tokens are now only returned in development mode; in production, the endpoint returns a generic message and relies on email delivery. + +### Additional Improvements + +- Min-width set on album detail action column for layout stability +- Removed unnecessary `EnsureArtistAliasTableAsync` call in MusicBrainz repository +- NuGet dependency updates across the project + +## Upgrading + +To upgrade to 2.1.0, follow the [upgrade guide](/upgrade/). + +Database migrations will run automatically on startup. If you were on the latest 2.0.x migration, the squashed `InitialBaseline` migration is a no-op — existing databases are unaffected. + +## Documentation + +- [Upgrade Guide](/upgrade/) +- [Docker Deployment](/docker/) +- [Security Overview](/security/) +- [Event Scripting Guide](/event-scripting/) + +## Thank You + +Thanks to everyone who contributed to this release through bug reports, feature requests, security audits, and pull requests! + +Questions or feedback? Join our [Discord community](https://discord.gg/bfMnEUrvbp) or open an issue on [GitHub](https://github.com/melodee-project/melodee/issues). diff --git a/docs/pages/changelog.md b/docs/pages/changelog.md index 194516f56..3cabe86a4 100644 --- a/docs/pages/changelog.md +++ b/docs/pages/changelog.md @@ -21,8 +21,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- -## [Unreleased] +## [2.1.0] - [UNRELEASED] +### Changed + +- **Replaced `SixLabors.ImageSharp` with `SkiaSharp`** for all image processing operations. A new `IImageProcessor` abstraction centralizes decode, encode, resize, format identification, and average-hash computation. `ImageHasher`, `ImageConvertor`, and `ImageValidator` now receive `IImageProcessor` via dependency injection rather than using static library calls. All services, Blazor components, CLI commands, and test constructors were updated consistently. SkiaSharp native assets are included conditionally (`SkiaSharp.NativeAssets.Linux` on Linux) so builds work across platforms without extra runtime dependencies. +- Set min-width on album detail action column for layout stability +- Remove unnecessary EnsureArtistAliasTableAsync call in MusicBrainz repository +- Dashboard data loading moved from `OnInitializedAsync` to `OnAfterRenderAsync` so skeleton placeholders render immediately instead of blocking the initial page render. +- Bulk delete operations in `SongService`, `AlbumService`, and `ArtistService` now batch-load entities in a single query instead of executing N+1 queries per item, significantly improving performance for large deletions. +- Quartz job scheduling extracted into `QuartzSchedulerExtensions.ScheduleJobIfConfigured` helper method, reducing `Program.cs` from 1,046 to ~860 lines and eliminating ~150 lines of repetitive scheduling code. +- **Squashed 55 EF Core migrations into a single `InitialBaseline` migration.** The migration history (107 files spanning Feb 2025 – Jan 2026) has been consolidated into one baseline file that generates the complete current schema. This reduces repository size, speeds up CI builds, and eliminates fragile migration chains. Existing databases that have already applied the latest migration are unaffected; new setups will apply only the single baseline. +- Added `.kilo/` project configuration with slash commands (`/build`, `/test`, `/test-mql`, `/lint`, `/migrate`, `/coverage`) and a project-aware `melodee-developer` agent for consistent developer workflows. +- Dropped JavaScript/TypeScript from CodeQL analysis — the repository contains only minimal JS files (jQuery, lunr.js in docs site), and scanning them wasted ~5–10 minutes per CI run with no security value. +- **Refactored `PartyModeService` to call domain services directly instead of making HTTP requests to the same application.** Replaced `HttpClient` with `PartySessionService`, `PartyQueueService`, `PartyPlaybackService`, and `PartySessionEndpointRegistryService` via dependency injection. User identity resolved through `IAuthService.CurrentUser` rather than cookie auth. Eliminates ~20 HTTP round-trips per user interaction (create, join, leave, queue, playback, endpoints) in party mode Blazor components. + +### Security + +- Password reset endpoint no longer exposes reset tokens in API responses. Tokens are now only returned in development mode; in production, the endpoint returns a generic message and relies on email delivery. --- ## [2.0.1] - 2026-05-01 diff --git a/kilo.json b/kilo.json new file mode 100644 index 000000000..5f0e7922d --- /dev/null +++ b/kilo.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://app.kilo.ai/config.json", + "instructions": [ + ".github/instructions/*.md" + ] +} diff --git a/src/Melodee.Blazor/Components/Pages/About.razor b/src/Melodee.Blazor/Components/Pages/About.razor index d7d9620fc..d80c95e01 100644 --- a/src/Melodee.Blazor/Components/Pages/About.razor +++ b/src/Melodee.Blazor/Components/Pages/About.razor @@ -75,7 +75,7 @@ @L("About.Description") - @L("About.ForMoreInfo") . + @L("About.ForMoreInfo") . diff --git a/src/Melodee.Blazor/Components/Pages/Dashboard.razor b/src/Melodee.Blazor/Components/Pages/Dashboard.razor index 40136d196..29d687f55 100644 --- a/src/Melodee.Blazor/Components/Pages/Dashboard.razor +++ b/src/Melodee.Blazor/Components/Pages/Dashboard.razor @@ -403,6 +403,21 @@ DashboardAuthenticationStateProvider.AuthenticationStateChanged += OnAuthenticationStateChanged; _isAdmin = CurrentUser?.IsAdmin() == true; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + await base.OnAfterRenderAsync(firstRender); + + if (!firstRender) + { + return; + } + + if (HttpContext != null) + { + return; + } var configuration = await ConfigurationFactory.GetConfigurationAsync(); _latestPageSize = configuration.GetValue(SettingRegistry.DefaultsDashboardLatestPageSize) ?? configuration.GetValue(SettingRegistry.DefaultsPageSize) ?? 50; diff --git a/src/Melodee.Blazor/Components/Pages/Data/AlbumDetail.razor b/src/Melodee.Blazor/Components/Pages/Data/AlbumDetail.razor index 368bb2e88..7f6a19a5d 100644 --- a/src/Melodee.Blazor/Components/Pages/Data/AlbumDetail.razor +++ b/src/Melodee.Blazor/Components/Pages/Data/AlbumDetail.razor @@ -294,7 +294,7 @@ @($"{song.SongNumber.ToStringPadLeft(3)}") @song.Title @CurrentUser!.FormatDuration(song.Duration.ToDuration()) - + (await imageValidator.ValidateImage(newFileInfo, PictureIdentifier.Front)).Data.IsValid).ConfigureAwait(false)) { var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); - _album.Images = new List + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) { - new() + _album.Images = new List { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + } } } } @@ -810,37 +814,16 @@ if (selectedImageSearchResult != null) { var httpClient = HttpClientFactory.CreateClient(); - var imageValidator = new ImageValidator(await ConfigurationFactory.GetConfigurationAsync()); + var imageValidator = new ImageValidator(ImageProcessor, await ConfigurationFactory.GetConfigurationAsync()); var albumImageFromSearchFileName = Path.Combine(_album.Directory.FullName(), _album.Directory.GetNextFileNameForType(Common.Data.Models.Album.FrontImageType).Item1); if (selectedImageSearchResult.ImageBytes != null) { await File.WriteAllBytesAsync(albumImageFromSearchFileName, selectedImageSearchResult.ImageBytes); var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); - _album.Images = new List + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) { - new() - { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; - } - else - { - if (await httpClient.DownloadFileAsync( - selectedImageSearchResult.Url, - albumImageFromSearchFileName, - async (_, newFileInfo, _) => (await imageValidator.ValidateImage(newFileInfo, PictureIdentifier.Front)).Data.IsValid).ConfigureAwait(false)) - { - var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); _album.Images = new List { new() @@ -856,6 +839,33 @@ }; } } + else + { + if (await httpClient.DownloadFileAsync( + selectedImageSearchResult.Url, + albumImageFromSearchFileName, + async (_, newFileInfo, _) => (await imageValidator.ValidateImage(newFileInfo, PictureIdentifier.Front)).Data.IsValid).ConfigureAwait(false)) + { + var newImageInfo = new FileInfo(albumImageFromSearchFileName); + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) + { + _album.Images = new List + { + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + } + } + } if ((_album.Images?.Any() ?? false) && selectedImageSearchResult.DoDeleteAllOtherImages) { @@ -878,20 +888,23 @@ var newAlbumImageFromSearchFileName = Path.Combine(_album.Directory.FullName(), $"{ImageInfo.ImageFilePrefix}{1.ToStringPadLeft(MelodeeConfiguration.ImageNameNumberPadding)}-{Common.Data.Models.Album.FrontImageType}.jpg"); File.Move(albumImageFromSearchFileName, newAlbumImageFromSearchFileName); var newImageInfo = new FileInfo(newAlbumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(newAlbumImageFromSearchFileName).ConfigureAwait(false); - _album.Images = new List + var imageInfo = await ImageProcessor.IdentifyAsync(newAlbumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) { - new() - { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; + _album.Images = new List + { + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + } } var result = await MediaEditService.SaveMelodeeAlbum(_album); diff --git a/src/Melodee.Blazor/Components/Pages/Media/AlbumEdit.razor b/src/Melodee.Blazor/Components/Pages/Media/AlbumEdit.razor index 9465a2df3..f12a4625a 100644 --- a/src/Melodee.Blazor/Components/Pages/Media/AlbumEdit.razor +++ b/src/Melodee.Blazor/Components/Pages/Media/AlbumEdit.razor @@ -9,12 +9,12 @@ @using Melodee.Common.Plugins.Validation @using Melodee.Common.Services.Scanning @using Melodee.Common.Services.SearchEngines -@using SixLabors.ImageSharp @using Album = Melodee.Common.Data.Models.Album @using FileInfo = System.IO.FileInfo @using ImageInfo = Melodee.Common.Models.ImageInfo @using ImageSearchResult = Melodee.Blazor.Components.Components.ImageSearchResult +@using Melodee.Common.Imaging @attribute [Authorize(Roles = "Administrator,Editor")] @@ -31,6 +31,7 @@ @inject DefaultImages DefaultImages @inject IMelodeeConfigurationFactory ConfigurationFactory @inject IHttpClientFactory HttpClientFactory +@inject IImageProcessor ImageProcessor Media Album Add/Edit @@ -393,37 +394,16 @@ { var httpClient = HttpClientFactory.CreateClient(); var album = await AlbumDiscoveryService.AlbumByUniqueIdAsync(_library.ToFileSystemDirectoryInfo(), ApiKey); - var imageValidator = new ImageValidator(await ConfigurationFactory.GetConfigurationAsync()); + var imageValidator = new ImageValidator(ImageProcessor, await ConfigurationFactory.GetConfigurationAsync()); var albumImageFromSearchFileName = Path.Combine(album.Directory.FullName(), album.Directory.GetNextFileNameForType(Album.FrontImageType).Item1); if (selectedImageSearchResult.ImageBytes != null) { await File.WriteAllBytesAsync(albumImageFromSearchFileName, selectedImageSearchResult.ImageBytes); var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); - _images = - [ - new() - { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - ]; - } - else - { - if (await httpClient.DownloadFileAsync( - selectedImageSearchResult.Url, - albumImageFromSearchFileName, - async (_, newFileInfo, _) => (await imageValidator.ValidateImage(newFileInfo, PictureIdentifier.Front)).Data.IsValid).ConfigureAwait(false)) + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) { - var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); _images = [ new() @@ -439,6 +419,33 @@ ]; } } + else + { + if (await httpClient.DownloadFileAsync( + selectedImageSearchResult.Url, + albumImageFromSearchFileName, + async (_, newFileInfo, _) => (await imageValidator.ValidateImage(newFileInfo, PictureIdentifier.Front)).Data.IsValid).ConfigureAwait(false)) + { + var newImageInfo = new FileInfo(albumImageFromSearchFileName); + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) + { + _images = + [ + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + ]; + } + } + } if (_images.FirstOrDefault() != null) { diff --git a/src/Melodee.Blazor/Components/Pages/Media/Library.razor b/src/Melodee.Blazor/Components/Pages/Media/Library.razor index 48921809e..f44339c72 100644 --- a/src/Melodee.Blazor/Components/Pages/Media/Library.razor +++ b/src/Melodee.Blazor/Components/Pages/Media/Library.razor @@ -12,10 +12,10 @@ @using Melodee.Common.Plugins.Validation @using Melodee.Common.Constants @using Melodee.Common.Utility -@using SixLabors.ImageSharp @using FileInfo = System.IO.FileInfo @using ImageInfo = Melodee.Common.Models.ImageInfo @using FilterOperator = Melodee.Common.Filtering.FilterOperator +@using Melodee.Common.Imaging @inject MainLayoutProxyService MainLayoutProxyService @inject ILogger Logger @@ -30,6 +30,7 @@ @inject NavigationManager NavigationManager @inject DefaultImages DefaultImages @inject DirectoryProcessorToStagingService DirectoryProcessorToStagingService +@inject IImageProcessor ImageProcessor @attribute [Authorize(Roles = "Administrator,Editor")] @@ -420,7 +421,7 @@ var httpClient = HttpClientFactory.CreateClient(); var configuration = await ConfigurationFactory.GetConfigurationAsync(); - var imageValidator = new ImageValidator(configuration); + var imageValidator = new ImageValidator(ImageProcessor, configuration); var maxResults = configuration.GetValue(SettingRegistry.SearchEngineDefaultPageSize) ?? configuration.GetValue(SettingRegistry.DefaultsPageSize); var albumsProcessed = 0; @@ -459,20 +460,23 @@ album.AlbumTitle(), imageSearchResult.MediaUrl); var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); - album.Images = new List + var imageInfo = await ImageProcessor.IdentifyAsync(albumImageFromSearchFileName).ConfigureAwait(false); + if (imageInfo != null) { - new() + album.Images = new List { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + } await MediaEditService.SaveMelodeeAlbum(album); count++; diff --git a/src/Melodee.Blazor/Controllers/Melodee/AuthController.cs b/src/Melodee.Blazor/Controllers/Melodee/AuthController.cs index c1bcc3612..bcde28af3 100644 --- a/src/Melodee.Blazor/Controllers/Melodee/AuthController.cs +++ b/src/Melodee.Blazor/Controllers/Melodee/AuthController.cs @@ -47,7 +47,8 @@ public class AuthController( IOptions tokenOptions, IOptions googleAuthOptions, ILogger logger, - UserPasswordResetService userPasswordResetService) : ControllerBase( + UserPasswordResetService userPasswordResetService, + IWebHostEnvironment webHostEnvironment) : ControllerBase( etagRepository, serializer, configuration, @@ -391,12 +392,17 @@ public async Task RequestPasswordResetAsync([FromBody] PasswordRe var baseUrl = GetBaseUrl(melodeeConfig); var resetUrl = $"{baseUrl}/reset-password?token={result.Data}"; - return Ok(new + if (webHostEnvironment.IsDevelopment()) { - message = "If an account with that email exists, a password reset link has been sent.", - resetToken = result.Data, - resetUrl - }); + return Ok(new + { + message = "Password reset link generated (development mode).", + resetToken = result.Data, + resetUrl + }); + } + + return Ok(new { message = "If an account with that email exists, a password reset link has been sent." }); } /// diff --git a/src/Melodee.Blazor/Extensions/QuartzSchedulerExtensions.cs b/src/Melodee.Blazor/Extensions/QuartzSchedulerExtensions.cs new file mode 100644 index 000000000..5a49ed1e4 --- /dev/null +++ b/src/Melodee.Blazor/Extensions/QuartzSchedulerExtensions.cs @@ -0,0 +1,44 @@ +using Melodee.Common.Configuration; +using Melodee.Common.Constants; +using Melodee.Common.Enums; +using Melodee.Common.Extensions; +using Quartz; + +namespace Melodee.Blazor.Extensions; + +public static class QuartzSchedulerExtensions +{ + private const ScanStatus DefaultScanStatus = ScanStatus.Idle; + + public static async Task ScheduleJobIfConfigured( + this IScheduler scheduler, + IMelodeeConfiguration configuration, + string settingKey, + JobKey jobKey, + string? triggerName = null, + bool includeScanStatusJobData = false) where TJob : IJob + { + var cronExpression = configuration.GetValue(settingKey); + if (cronExpression.Nullify() == null) + { + return; + } + + var jobBuilder = JobBuilder.Create() + .WithIdentity(jobKey) + .Build(); + + var triggerBuilder = TriggerBuilder.Create() + .WithIdentity(triggerName ?? $"{jobKey.Name}-trigger") + .WithCronSchedule(cronExpression!) + .StartNow(); + + if (includeScanStatusJobData) + { + triggerBuilder.UsingJobData(JobMapNameRegistry.ScanStatus, DefaultScanStatus.ToString()) + .UsingJobData(JobMapNameRegistry.Count, 0); + } + + await scheduler.ScheduleJob(jobBuilder, triggerBuilder.Build()); + } +} diff --git a/src/Melodee.Blazor/Melodee.Blazor.csproj b/src/Melodee.Blazor/Melodee.Blazor.csproj index 29ff482d0..4b10b406c 100644 --- a/src/Melodee.Blazor/Melodee.Blazor.csproj +++ b/src/Melodee.Blazor/Melodee.Blazor.csproj @@ -16,7 +16,7 @@ - 2.0.1 + 2.1.0 build$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) $(VersionPrefix).0 diff --git a/src/Melodee.Blazor/Program.cs b/src/Melodee.Blazor/Program.cs index fc614afe6..5e063cbba 100644 --- a/src/Melodee.Blazor/Program.cs +++ b/src/Melodee.Blazor/Program.cs @@ -8,6 +8,7 @@ using DecentDB.EntityFrameworkCore; using Melodee.Blazor.Components; using Melodee.Blazor.Constants; +using Melodee.Blazor.Extensions; using Melodee.Blazor.Filters; using Melodee.Blazor.Hubs; using Melodee.Blazor.Middleware; @@ -15,8 +16,7 @@ using Melodee.Common.Configuration; using Melodee.Common.Constants; using Melodee.Common.Data; -using Melodee.Common.Enums; -using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Jobs; using Melodee.Common.MessageBus.EventHandlers; using Melodee.Common.Metadata; @@ -310,6 +310,7 @@ }; }); builder.Services.AddCascadingAuthenticationState(); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); @@ -573,6 +574,7 @@ .AddScoped() .AddScoped() .AddScoped() + .AddSingleton() .AddScoped() .AddScoped() .AddScoped() @@ -609,6 +611,7 @@ .AddScoped() .AddScoped() .AddScoped() + .AddScoped() .AddScoped() .AddScoped() .AddScoped(); @@ -766,201 +769,79 @@ var melodeeConfigurationFactory = app.Services.GetRequiredService(); var melodeeConfiguration = await melodeeConfigurationFactory.GetConfigurationAsync(); - // Register job history listener to track all job executions var scopeFactory = app.Services.GetRequiredService(); quartzScheduler.ListenerManager.AddJobListener( new JobHistoryListener(scopeFactory, Log.Logger), GroupMatcher.AnyGroup()); - var artistHousekeepingCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsArtistHousekeepingCronExpression); - if (artistHousekeepingCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.ArtistHousekeepingJobJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("ArtistHousekeepingJobJobKey-trigger") - .WithCronSchedule(artistHousekeepingCronExpression!) - .StartNow() - .Build()); - } - - var artistSearchEngineHousekeepingCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsArtistSearchEngineHousekeepingCronExpression); - if (artistSearchEngineHousekeepingCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.ArtistSearchEngineHousekeepingJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("ArtistSearchEngineHousekeepingJob-trigger") - .WithCronSchedule(artistSearchEngineHousekeepingCronExpression!) - .StartNow() - .Build()); - } - - var libraryInboundProcessJobKeyCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsLibraryProcessCronExpression); - if (libraryInboundProcessJobKeyCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.LibraryInboundProcessJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("LibraryInboundProcessJob-trigger") - .UsingJobData(JobMapNameRegistry.ScanStatus, ScanStatus.Idle.ToString()) - .UsingJobData(JobMapNameRegistry.Count, 0) - .WithCronSchedule(libraryInboundProcessJobKeyCronExpression!) - .StartNow() - .Build()); - } - - var libraryInsertCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsLibraryInsertCronExpression); - if (libraryInsertCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.LibraryProcessJobJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("LibraryProcessJob-trigger") - .UsingJobData(JobMapNameRegistry.ScanStatus, ScanStatus.Idle.ToString()) - .UsingJobData(JobMapNameRegistry.Count, 0) - .WithCronSchedule(libraryInsertCronExpression!) - .StartNow() - .Build()); - } - - var musicBrainzUpdateDatabaseCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsMusicBrainzUpdateDatabaseCronExpression); - if (musicBrainzUpdateDatabaseCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.MusicBrainzUpdateDatabaseJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("MusicBrainzUpdateDatabaseJob-trigger") - .WithCronSchedule(musicBrainzUpdateDatabaseCronExpression!) - .StartNow() - .Build()); - } - - var nowPlayingCleanupCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsNowPlayingCleanupCronExpression); - if (nowPlayingCleanupCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.NowPlayingCleanupJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("NowPlayingCleanupJob-trigger") - .WithCronSchedule(nowPlayingCleanupCronExpression!) - .StartNow() - .Build()); - } - - var chartUpdateCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsChartUpdateCronExpression); - if (chartUpdateCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.ChartUpdateJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("ChartUpdateJob-trigger") - .WithCronSchedule(chartUpdateCronExpression!) - .StartNow() - .Build()); - } - - var stagingAutoMoveCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsStagingAutoMoveCronExpression); - if (stagingAutoMoveCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.StagingAutoMoveJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("StagingAutoMoveJob-trigger") - .UsingJobData(JobMapNameRegistry.ScanStatus, ScanStatus.Idle.ToString()) - .UsingJobData(JobMapNameRegistry.Count, 0) - .WithCronSchedule(stagingAutoMoveCronExpression!) - .StartNow() - .Build()); - } - - var stagingAlbumRevalidationCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsStagingAlbumRevalidationCronExpression); - if (stagingAlbumRevalidationCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.StagingAlbumRevalidationJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("StagingAlbumRevalidationJob-trigger") - .UsingJobData(JobMapNameRegistry.ScanStatus, ScanStatus.Idle.ToString()) - .UsingJobData(JobMapNameRegistry.Count, 0) - .WithCronSchedule(stagingAlbumRevalidationCronExpression!) - .StartNow() - .Build()); - } - - var podcastRefreshCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsPodcastRefreshCronExpression); - if (podcastRefreshCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.PodcastRefreshJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("PodcastRefreshJob-trigger") - .WithCronSchedule(podcastRefreshCronExpression!) - .StartNow() - .Build()); - } - - var podcastDownloadCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsPodcastDownloadCronExpression); - if (podcastDownloadCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.PodcastDownloadJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("PodcastDownloadJob-trigger") - .WithCronSchedule(podcastDownloadCronExpression!) - .StartNow() - .Build()); - } - - var podcastCleanupCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsPodcastCleanupCronExpression); - if (podcastCleanupCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.PodcastCleanupJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("PodcastCleanupJob-trigger") - .WithCronSchedule(podcastCleanupCronExpression!) - .StartNow() - .Build()); - } - - var podcastRecoveryCronExpression = melodeeConfiguration.GetValue(SettingRegistry.JobsPodcastRecoveryCronExpression); - if (podcastRecoveryCronExpression.Nullify() != null) - { - await quartzScheduler.ScheduleJob( - JobBuilder.Create() - .WithIdentity(JobKeyRegistry.PodcastRecoveryJobKey) - .Build(), - TriggerBuilder.Create() - .WithIdentity("PodcastRecoveryJob-trigger") - .WithCronSchedule(podcastRecoveryCronExpression!) - .StartNow() - .Build()); - } + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsArtistHousekeepingCronExpression, + JobKeyRegistry.ArtistHousekeepingJobJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsArtistSearchEngineHousekeepingCronExpression, + JobKeyRegistry.ArtistSearchEngineHousekeepingJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsLibraryProcessCronExpression, + JobKeyRegistry.LibraryInboundProcessJobKey, + includeScanStatusJobData: true); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsLibraryInsertCronExpression, + JobKeyRegistry.LibraryProcessJobJobKey, + includeScanStatusJobData: true); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsMusicBrainzUpdateDatabaseCronExpression, + JobKeyRegistry.MusicBrainzUpdateDatabaseJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsNowPlayingCleanupCronExpression, + JobKeyRegistry.NowPlayingCleanupJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsChartUpdateCronExpression, + JobKeyRegistry.ChartUpdateJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsStagingAutoMoveCronExpression, + JobKeyRegistry.StagingAutoMoveJobKey, + includeScanStatusJobData: true); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsStagingAlbumRevalidationCronExpression, + JobKeyRegistry.StagingAlbumRevalidationJobKey, + includeScanStatusJobData: true); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsPodcastRefreshCronExpression, + JobKeyRegistry.PodcastRefreshJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsPodcastDownloadCronExpression, + JobKeyRegistry.PodcastDownloadJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsPodcastCleanupCronExpression, + JobKeyRegistry.PodcastCleanupJobKey); + + await quartzScheduler.ScheduleJobIfConfigured( + melodeeConfiguration, + SettingRegistry.JobsPodcastRecoveryCronExpression, + JobKeyRegistry.PodcastRecoveryJobKey); } #endregion diff --git a/src/Melodee.Blazor/Services/PartyModeService.cs b/src/Melodee.Blazor/Services/PartyModeService.cs index cd82635bf..127d109b1 100644 --- a/src/Melodee.Blazor/Services/PartyModeService.cs +++ b/src/Melodee.Blazor/Services/PartyModeService.cs @@ -1,497 +1,554 @@ +using Melodee.Blazor.Security.Extensions; +using Melodee.Common.Enums.PartyMode; using Melodee.Common.Models; +using Melodee.Common.Services; namespace Melodee.Blazor.Services; -/// -/// Service for interacting with Party Mode API endpoints. -/// -public class PartyModeService +public sealed class PartyModeService( + IAuthService authService, + PartySessionService partySessionService, + PartyQueueService partyQueueService, + PartyPlaybackService partyPlaybackService, + PartySessionEndpointRegistryService endpointRegistryService, + ILogger logger) { - private readonly HttpClient _httpClient; - private readonly ILogger _logger; - - public PartyModeService(HttpClient httpClient, ILogger logger) + public async Task?> CreateSessionAsync(string name, string? joinCode = null, CancellationToken cancellationToken = default) { - _httpClient = httpClient; - _logger = logger; - } - - private const string BasePath = "api/v1/party-sessions"; + logger.LogDebug("[PartyModeService] CreateSessionAsync: Name={Name}, HasJoinCode={HasJoinCode}", name, joinCode is not null); - public async Task?> CreateSessionAsync(string name, string? joinCode = null) - { - _logger.LogDebug("[PartyModeService] CreateSessionAsync: Name={Name}, HasJoinCode={HasJoinCode}", name, joinCode != null); - try + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { Name = name, JoinCode = joinCode }; - var response = await _httpClient.PostAsJsonAsync(BasePath, request); - if (response.IsSuccessStatusCode) - { - var result = await response.Content.ReadFromJsonAsync>(); - _logger.LogDebug("[PartyModeService] CreateSessionAsync succeeded: ApiKey={ApiKey}", result?.Data?.ApiKey); - return result; - } - _logger.LogWarning("[PartyModeService] CreateSessionAsync failed: StatusCode={StatusCode}", response.StatusCode); return null; } - catch (Exception ex) + + var result = await partySessionService.CreateAsync(name, userId, joinCode, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in CreateSessionAsync"); - return null; + logger.LogWarning("[PartyModeService] CreateSessionAsync failed: {Messages}", string.Join(", ", result.Messages ?? [])); + return new OperationResult(result.Errors?.FirstOrDefault()?.Message ?? "Failed to create session") + { + Type = result.Type, + Data = null! + }; } + + logger.LogDebug("[PartyModeService] CreateSessionAsync succeeded: ApiKey={ApiKey}", result.Data.ApiKey); + return new OperationResult + { + Data = MapToDto(result.Data) + }; } - public async Task?> GetMySessionsAsync() + public async Task?> GetMySessionsAsync(CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetMySessionsAsync starting"); - try + logger.LogDebug("[PartyModeService] GetMySessionsAsync starting"); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var response = await _httpClient.GetAsync($"{BasePath}/my"); - if (response.IsSuccessStatusCode) - { - var result = await response.Content.ReadFromJsonAsync>(); - _logger.LogDebug("[PartyModeService] GetMySessionsAsync succeeded: Count={Count}", result?.Count() ?? 0); - return result; - } - _logger.LogWarning("[PartyModeService] GetMySessionsAsync failed: StatusCode={StatusCode}", response.StatusCode); return null; } - catch (Exception ex) + + var result = await partySessionService.GetUserSessionsAsync(userId, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in GetMySessionsAsync"); + logger.LogWarning("[PartyModeService] GetMySessionsAsync failed"); return null; } + + var sessions = result.Data.Select(MapToDto); + logger.LogDebug("[PartyModeService] GetMySessionsAsync succeeded: Count={Count}", result.Data.Count()); + return sessions; } - public async Task?> GetActiveSessionsAsync() + public async Task?> GetActiveSessionsAsync(CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetActiveSessionsAsync starting"); - try - { - var response = await _httpClient.GetAsync($"{BasePath}/active"); - if (response.IsSuccessStatusCode) - { - var result = await response.Content.ReadFromJsonAsync>(); - _logger.LogDebug("[PartyModeService] GetActiveSessionsAsync succeeded: Count={Count}", result?.Count() ?? 0); - return result; - } - _logger.LogWarning("[PartyModeService] GetActiveSessionsAsync failed: StatusCode={StatusCode}", response.StatusCode); - return null; - } - catch (Exception ex) + logger.LogDebug("[PartyModeService] GetActiveSessionsAsync starting"); + + var result = await partySessionService.GetActiveSessionsAsync(cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in GetActiveSessionsAsync"); + logger.LogWarning("[PartyModeService] GetActiveSessionsAsync failed"); return null; } + + var sessions = result.Data.Select(MapToDto); + logger.LogDebug("[PartyModeService] GetActiveSessionsAsync succeeded: Count={Count}", result.Data.Count()); + return sessions; } - public async Task?> GetSessionAsync(Guid sessionApiKey) + public async Task?> GetSessionAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetSessionAsync: ApiKey={ApiKey}", sessionApiKey); - try + logger.LogDebug("[PartyModeService] GetSessionAsync: ApiKey={ApiKey}", sessionApiKey); + + var result = await partySessionService.GetAsync(sessionApiKey, cancellationToken); + + if (!result.IsSuccess || result.Data is null) { - var response = await _httpClient.GetAsync($"{BasePath}/{sessionApiKey}"); - if (response.IsSuccessStatusCode) + logger.LogWarning("[PartyModeService] GetSessionAsync failed: ApiKey={ApiKey}", sessionApiKey); + return new OperationResult(result.Errors?.FirstOrDefault()?.Message ?? "Session not found") { - var result = await response.Content.ReadFromJsonAsync>(); - _logger.LogDebug("[PartyModeService] GetSessionAsync succeeded: Name={Name}", result?.Data?.Name); - return result; - } - _logger.LogWarning("[PartyModeService] GetSessionAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); - return null; + Type = OperationResponseType.NotFound, + Data = null! + }; } - catch (Exception ex) + + logger.LogDebug("[PartyModeService] GetSessionAsync succeeded: Name={Name}", result.Data.Name); + return new OperationResult { - _logger.LogError(ex, "[PartyModeService] Exception in GetSessionAsync: ApiKey={ApiKey}", sessionApiKey); - return null; - } + Data = MapToDto(result.Data) + }; } - public async Task?> JoinSessionAsync(Guid sessionApiKey, string? joinCode = null) + public async Task?> JoinSessionAsync(Guid sessionApiKey, string? joinCode = null, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] JoinSessionAsync: ApiKey={ApiKey}, HasJoinCode={HasJoinCode}", sessionApiKey, joinCode != null); - try + logger.LogDebug("[PartyModeService] JoinSessionAsync: ApiKey={ApiKey}, HasJoinCode={HasJoinCode}", sessionApiKey, joinCode is not null); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { JoinCode = joinCode }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/join", request); - if (response.IsSuccessStatusCode) - { - var result = await response.Content.ReadFromJsonAsync>(); - _logger.LogDebug("[PartyModeService] JoinSessionAsync succeeded: ApiKey={ApiKey}", sessionApiKey); - return result; - } - _logger.LogWarning("[PartyModeService] JoinSessionAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partySessionService.JoinAsync(sessionApiKey, userId, joinCode, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in JoinSessionAsync: ApiKey={ApiKey}", sessionApiKey); - return null; + logger.LogWarning("[PartyModeService] JoinSessionAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); + return new OperationResult(result.Errors?.FirstOrDefault()?.Message ?? "Failed to join session") + { + Type = result.Type, + Data = null! + }; } + + logger.LogDebug("[PartyModeService] JoinSessionAsync succeeded: ApiKey={ApiKey}", sessionApiKey); + return new OperationResult + { + Data = new PartySessionParticipantDto(result.Data.UserId, result.Data.Role.ToString(), result.Data.JoinedAt.ToString()) + }; } - public async Task LeaveSessionAsync(Guid sessionApiKey) + public async Task LeaveSessionAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] LeaveSessionAsync: ApiKey={ApiKey}", sessionApiKey); - try - { - var response = await _httpClient.PostAsync($"{BasePath}/{sessionApiKey}/leave", null); - var success = response.IsSuccessStatusCode; - _logger.LogDebug("[PartyModeService] LeaveSessionAsync: ApiKey={ApiKey}, Success={Success}", sessionApiKey, success); - return success; - } - catch (Exception ex) + logger.LogDebug("[PartyModeService] LeaveSessionAsync: ApiKey={ApiKey}", sessionApiKey); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - _logger.LogError(ex, "[PartyModeService] Exception in LeaveSessionAsync: ApiKey={ApiKey}", sessionApiKey); return false; } + + var result = await partySessionService.LeaveAsync(sessionApiKey, userId, cancellationToken); + logger.LogDebug("[PartyModeService] LeaveSessionAsync: ApiKey={ApiKey}, Success={Success}", sessionApiKey, result.IsSuccess); + return result.IsSuccess; } - public async Task EndSessionAsync(Guid sessionApiKey) + public async Task EndSessionAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] EndSessionAsync: ApiKey={ApiKey}", sessionApiKey); - try - { - var response = await _httpClient.PostAsync($"{BasePath}/{sessionApiKey}/end", null); - var success = response.IsSuccessStatusCode; - _logger.LogDebug("[PartyModeService] EndSessionAsync: ApiKey={ApiKey}, Success={Success}", sessionApiKey, success); - return success; - } - catch (Exception ex) + logger.LogDebug("[PartyModeService] EndSessionAsync: ApiKey={ApiKey}", sessionApiKey); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - _logger.LogError(ex, "[PartyModeService] Exception in EndSessionAsync: ApiKey={ApiKey}", sessionApiKey); return false; } + + var result = await partySessionService.EndAsync(sessionApiKey, userId, cancellationToken); + logger.LogDebug("[PartyModeService] EndSessionAsync: ApiKey={ApiKey}, Success={Success}", sessionApiKey, result.IsSuccess); + return result.IsSuccess; } - public async Task>?> GetParticipantsAsync(Guid sessionApiKey) + public async Task>?> GetParticipantsAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetParticipantsAsync: ApiKey={ApiKey}", sessionApiKey); - try + logger.LogDebug("[PartyModeService] GetParticipantsAsync: ApiKey={ApiKey}", sessionApiKey); + + var result = await partySessionService.GetParticipantsAsync(sessionApiKey, cancellationToken); + + if (!result.IsSuccess) { - var response = await _httpClient.GetAsync($"{BasePath}/{sessionApiKey}/participants"); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>>(); - } - _logger.LogWarning("[PartyModeService] GetParticipantsAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); + logger.LogWarning("[PartyModeService] GetParticipantsAsync failed: ApiKey={ApiKey}", sessionApiKey); return null; } - catch (Exception ex) + + var participants = result.Data.Select(p => new PartySessionParticipantDto(p.UserId, p.Role.ToString(), p.JoinedAt.ToString())); + return new OperationResult> { - _logger.LogError(ex, "[PartyModeService] Exception in GetParticipantsAsync: ApiKey={ApiKey}", sessionApiKey); - return null; - } + Data = participants + }; } - public async Task?> GetQueueAsync(Guid sessionApiKey) + public async Task?> GetQueueAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetQueueAsync: ApiKey={ApiKey}", sessionApiKey); - try + logger.LogDebug("[PartyModeService] GetQueueAsync: ApiKey={ApiKey}", sessionApiKey); + + var result = await partyQueueService.GetQueueAsync(sessionApiKey, cancellationToken); + + if (!result.IsSuccess) { - var response = await _httpClient.GetAsync($"{BasePath}/{sessionApiKey}/queue"); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] GetQueueAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); + logger.LogWarning("[PartyModeService] GetQueueAsync failed: ApiKey={ApiKey}", sessionApiKey); return null; } - catch (Exception ex) + + var (revision, items) = result.Data; + return new OperationResult { - _logger.LogError(ex, "[PartyModeService] Exception in GetQueueAsync: ApiKey={ApiKey}", sessionApiKey); - return null; - } + Data = new QueueResponseDto( + revision, + items.Select(i => new PartyQueueItemDto(i.ApiKey, i.SongApiKey, i.EnqueuedByUserId, i.EnqueuedAt.ToString(), i.SortOrder, i.Source))) + }; } public async Task?> AddToQueueAsync( Guid sessionApiKey, IEnumerable songApiKeys, string? source = null, - long expectedRevision = 1) + long expectedRevision = 1, + CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] AddToQueueAsync: ApiKey={ApiKey}, SongCount={SongCount}, ExpectedRevision={ExpectedRevision}", + logger.LogDebug("[PartyModeService] AddToQueueAsync: ApiKey={ApiKey}, SongCount={SongCount}, ExpectedRevision={ExpectedRevision}", sessionApiKey, songApiKeys.Count(), expectedRevision); - try + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { SongApiKeys = songApiKeys, Source = source, ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/queue/items", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - if (response.StatusCode == System.Net.HttpStatusCode.Conflict) + return null; + } + + var result = await partyQueueService.AddItemsAsync(sessionApiKey, songApiKeys, userId, source, expectedRevision, cancellationToken); + + if (!result.IsSuccess) + { + if (result.Type == OperationResponseType.Conflict) { - _logger.LogWarning("[PartyModeService] AddToQueueAsync conflict (revision mismatch): ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] AddToQueueAsync conflict (revision mismatch): ApiKey={ApiKey}", sessionApiKey); } else { - _logger.LogWarning("[PartyModeService] AddToQueueAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); + logger.LogWarning("[PartyModeService] AddToQueueAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); } return null; } - catch (Exception ex) + + var (newRevision, addedItems) = result.Data; + return new OperationResult { - _logger.LogError(ex, "[PartyModeService] Exception in AddToQueueAsync: ApiKey={ApiKey}", sessionApiKey); - return null; - } + Data = new AddItemsResponseDto( + newRevision, + addedItems.Select(i => new PartyQueueItemDto(i.ApiKey, i.SongApiKey, i.EnqueuedByUserId, i.EnqueuedAt.ToString(), i.SortOrder, i.Source))) + }; } - public async Task?> RemoveFromQueueAsync(Guid sessionApiKey, Guid itemApiKey, long expectedRevision) + public async Task?> RemoveFromQueueAsync(Guid sessionApiKey, Guid itemApiKey, long expectedRevision, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] RemoveFromQueueAsync: SessionApiKey={SessionApiKey}, ItemApiKey={ItemApiKey}", sessionApiKey, itemApiKey); - try + logger.LogDebug("[PartyModeService] RemoveFromQueueAsync: SessionApiKey={SessionApiKey}, ItemApiKey={ItemApiKey}", sessionApiKey, itemApiKey); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var response = await _httpClient.DeleteAsync( - $"{BasePath}/{sessionApiKey}/queue/items/{itemApiKey}?expectedRevision={expectedRevision}"); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] RemoveFromQueueAsync failed: SessionApiKey={SessionApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyQueueService.RemoveItemAsync(sessionApiKey, itemApiKey, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in RemoveFromQueueAsync: SessionApiKey={SessionApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] RemoveFromQueueAsync failed: SessionApiKey={SessionApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult { Data = result.Data }; } public async Task?> ReorderQueueItemAsync( Guid sessionApiKey, Guid itemApiKey, int newIndex, - long expectedRevision) + long expectedRevision, + CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] ReorderQueueItemAsync: SessionApiKey={SessionApiKey}, ItemApiKey={ItemApiKey}, NewIndex={NewIndex}", + logger.LogDebug("[PartyModeService] ReorderQueueItemAsync: SessionApiKey={SessionApiKey}, ItemApiKey={ItemApiKey}, NewIndex={NewIndex}", sessionApiKey, itemApiKey, newIndex); - try + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { NewIndex = newIndex, ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync( - $"{BasePath}/{sessionApiKey}/queue/items/{itemApiKey}/reorder", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] ReorderQueueItemAsync failed: SessionApiKey={SessionApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyQueueService.ReorderItemAsync(sessionApiKey, itemApiKey, newIndex, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in ReorderQueueItemAsync: SessionApiKey={SessionApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] ReorderQueueItemAsync failed: SessionApiKey={SessionApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult { Data = result.Data }; } - public async Task?> ClearQueueAsync(Guid sessionApiKey, long expectedRevision) + public async Task?> ClearQueueAsync(Guid sessionApiKey, long expectedRevision, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] ClearQueueAsync: SessionApiKey={SessionApiKey}, ExpectedRevision={ExpectedRevision}", sessionApiKey, expectedRevision); - try + logger.LogDebug("[PartyModeService] ClearQueueAsync: SessionApiKey={SessionApiKey}, ExpectedRevision={ExpectedRevision}", sessionApiKey, expectedRevision); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var response = await _httpClient.PostAsync( - $"{BasePath}/{sessionApiKey}/queue/clear?expectedRevision={expectedRevision}", null); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] ClearQueueAsync failed: SessionApiKey={SessionApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyQueueService.ClearAsync(sessionApiKey, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in ClearQueueAsync: SessionApiKey={SessionApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] ClearQueueAsync failed: SessionApiKey={SessionApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult { Data = result.Data }; } - public async Task?> GetPlaybackStateAsync(Guid sessionApiKey) + public async Task?> GetPlaybackStateAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] GetPlaybackStateAsync: ApiKey={ApiKey}", sessionApiKey); - try - { - var response = await _httpClient.GetAsync($"{BasePath}/{sessionApiKey}/playback"); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] GetPlaybackStateAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); - return null; - } - catch (Exception ex) + logger.LogDebug("[PartyModeService] GetPlaybackStateAsync: ApiKey={ApiKey}", sessionApiKey); + + var result = await partyPlaybackService.GetPlaybackStateAsync(sessionApiKey, cancellationToken); + + if (!result.IsSuccess || result.Data is null) { - _logger.LogError(ex, "[PartyModeService] Exception in GetPlaybackStateAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] GetPlaybackStateAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - public async Task?> PlayAsync(Guid sessionApiKey, double? position = null, long expectedRevision = 0) + public async Task?> PlayAsync(Guid sessionApiKey, double? position = null, long expectedRevision = 0, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] PlayAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); - try + logger.LogDebug("[PartyModeService] PlayAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { PositionSeconds = position, ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/playback/play", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] PlayAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyPlaybackService.UpdateIntentAsync(sessionApiKey, PlaybackIntent.Play, position, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in PlayAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] PlayAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - public async Task?> PauseAsync(Guid sessionApiKey, double? position = null, long expectedRevision = 0) + public async Task?> PauseAsync(Guid sessionApiKey, double? position = null, long expectedRevision = 0, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] PauseAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); - try + logger.LogDebug("[PartyModeService] PauseAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { PositionSeconds = position, ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/playback/pause", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] PauseAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyPlaybackService.UpdateIntentAsync(sessionApiKey, PlaybackIntent.Pause, position, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in PauseAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] PauseAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - public async Task?> SkipAsync(Guid sessionApiKey, long expectedRevision) + public async Task?> SkipAsync(Guid sessionApiKey, long expectedRevision, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] SkipAsync: ApiKey={ApiKey}, ExpectedRevision={ExpectedRevision}", sessionApiKey, expectedRevision); - try + logger.LogDebug("[PartyModeService] SkipAsync: ApiKey={ApiKey}, ExpectedRevision={ExpectedRevision}", sessionApiKey, expectedRevision); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/playback/skip", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] SkipAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyPlaybackService.UpdateIntentAsync(sessionApiKey, PlaybackIntent.Skip, null, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in SkipAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] SkipAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - public async Task?> SeekAsync(Guid sessionApiKey, double position, long expectedRevision) + public async Task?> SeekAsync(Guid sessionApiKey, double position, long expectedRevision, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] SeekAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); - try + logger.LogDebug("[PartyModeService] SeekAsync: ApiKey={ApiKey}, Position={Position}", sessionApiKey, position); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { PositionSeconds = position, ExpectedRevision = expectedRevision }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/playback/seek", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] SeekAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyPlaybackService.UpdateIntentAsync(sessionApiKey, PlaybackIntent.Seek, position, userId, expectedRevision, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in SeekAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] SeekAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - public async Task?> SetVolumeAsync(Guid sessionApiKey, double volume) + public async Task?> SetVolumeAsync(Guid sessionApiKey, double volume, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] SetVolumeAsync: ApiKey={ApiKey}, Volume={Volume}", sessionApiKey, volume); - try + logger.LogDebug("[PartyModeService] SetVolumeAsync: ApiKey={ApiKey}, Volume={Volume}", sessionApiKey, volume); + + var userId = authService.CurrentUser.UserId(); + if (userId == 0) { - var request = new { Volume = volume }; - var response = await _httpClient.PostAsJsonAsync($"{BasePath}/{sessionApiKey}/playback/volume", request); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>(); - } - _logger.LogWarning("[PartyModeService] SetVolumeAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); return null; } - catch (Exception ex) + + var result = await partyPlaybackService.UpdateFromHeartbeatAsync(sessionApiKey, null, 0, false, volume, userId, cancellationToken); + + if (!result.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in SetVolumeAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] SetVolumeAsync failed: ApiKey={ApiKey}, StatusCode={Type}", sessionApiKey, result.Type); return null; } + + return new OperationResult + { + Data = new PartyPlaybackStateDto( + result.Data.CurrentQueueItemApiKey, + result.Data.PositionSeconds, + result.Data.IsPlaying, + result.Data.Volume) + }; } - // Endpoint Registry Methods + public async Task>?> GetEndpointsForSessionAsync(Guid sessionApiKey, CancellationToken cancellationToken = default) + { + logger.LogDebug("[PartyModeService] GetEndpointsForSessionAsync: ApiKey={ApiKey}", sessionApiKey); - private const string EndpointsBasePath = "api/v1/endpoints"; + var userId = authService.CurrentUser.UserId(); - public async Task>?> GetEndpointsForSessionAsync(Guid sessionApiKey) - { - _logger.LogDebug("[PartyModeService] GetEndpointsForSessionAsync: ApiKey={ApiKey}", sessionApiKey); - try + var sessionResult = await partySessionService.GetAsync(sessionApiKey, cancellationToken); + if (!sessionResult.IsSuccess || sessionResult.Data is null) { - var response = await _httpClient.GetAsync($"{EndpointsBasePath}/for-session/{sessionApiKey}"); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync>>(); - } - _logger.LogWarning("[PartyModeService] GetEndpointsForSessionAsync failed: ApiKey={ApiKey}, StatusCode={StatusCode}", sessionApiKey, response.StatusCode); + logger.LogWarning("[PartyModeService] GetEndpointsForSessionAsync session not found: ApiKey={ApiKey}", sessionApiKey); return null; } - catch (Exception ex) + + var session = sessionResult.Data; + var endpointsResult = await endpointRegistryService.GetEndpointsForUserAsync(userId, cancellationToken); + + if (!endpointsResult.IsSuccess) { - _logger.LogError(ex, "[PartyModeService] Exception in GetEndpointsForSessionAsync: ApiKey={ApiKey}", sessionApiKey); + logger.LogWarning("[PartyModeService] GetEndpointsForSessionAsync failed: ApiKey={ApiKey}", sessionApiKey); return null; } + + var now = NodaTime.SystemClock.Instance.GetCurrentInstant(); + var staleThreshold = NodaTime.Duration.FromTimeSpan(TimeSpan.FromSeconds(30)); + + var dtos = endpointsResult.Data.Select(e => + { + var isStale = !e.LastSeenAt.HasValue || e.LastSeenAt.Value < (now - staleThreshold); + return new SessionEndpointDto( + e.ApiKey, + e.Name, + e.Type.ToString(), + e.IsShared, + e.Room, + e.LastSeenAt?.ToString(), + e.CapabilitiesJson, + e.OwnerUserId == userId, + e.ApiKey == session.ActiveEndpointId, + isStale); + }); + + return new OperationResult> { Data = dtos }; } - public async Task AttachEndpointAsync(Guid endpointApiKey, Guid sessionApiKey) + public async Task AttachEndpointAsync(Guid endpointApiKey, Guid sessionApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] AttachEndpointAsync: EndpointApiKey={EndpointApiKey}, SessionApiKey={SessionApiKey}", endpointApiKey, sessionApiKey); - try - { - var request = new { SessionApiKey = sessionApiKey }; - var response = await _httpClient.PostAsJsonAsync($"{EndpointsBasePath}/{endpointApiKey}/attach", request); - var success = response.IsSuccessStatusCode; - _logger.LogDebug("[PartyModeService] AttachEndpointAsync: Success={Success}", success); - return success; - } - catch (Exception ex) - { - _logger.LogError(ex, "[PartyModeService] Exception in AttachEndpointAsync: EndpointApiKey={EndpointApiKey}", endpointApiKey); - return false; - } + logger.LogDebug("[PartyModeService] AttachEndpointAsync: EndpointApiKey={EndpointApiKey}, SessionApiKey={SessionApiKey}", endpointApiKey, sessionApiKey); + + var result = await endpointRegistryService.AttachToSessionAsync(endpointApiKey, sessionApiKey, cancellationToken); + logger.LogDebug("[PartyModeService] AttachEndpointAsync: Success={Success}", result.IsSuccess); + return result.IsSuccess; } - public async Task DetachEndpointAsync(Guid endpointApiKey) + public async Task DetachEndpointAsync(Guid endpointApiKey, CancellationToken cancellationToken = default) { - _logger.LogDebug("[PartyModeService] DetachEndpointAsync: EndpointApiKey={EndpointApiKey}", endpointApiKey); - try - { - var response = await _httpClient.PostAsync($"{EndpointsBasePath}/{endpointApiKey}/detach", null); - var success = response.IsSuccessStatusCode; - _logger.LogDebug("[PartyModeService] DetachEndpointAsync: Success={Success}", success); - return success; - } - catch (Exception ex) - { - _logger.LogError(ex, "[PartyModeService] Exception in DetachEndpointAsync: EndpointApiKey={EndpointApiKey}", endpointApiKey); - return false; - } + logger.LogDebug("[PartyModeService] DetachEndpointAsync: EndpointApiKey={EndpointApiKey}", endpointApiKey); + + var result = await endpointRegistryService.DetachAsync(endpointApiKey, cancellationToken); + logger.LogDebug("[PartyModeService] DetachEndpointAsync: Success={Success}", result.IsSuccess); + return result.IsSuccess; + } + + private static PartySessionDto MapToDto(Common.Data.Models.PartySession session) + { + return new PartySessionDto( + session.ApiKey, + session.Name, + session.OwnerUserId, + session.Status.ToString(), + session.QueueRevision, + session.PlaybackRevision); } } -// DTO classes (simplified versions matching API responses) public record PartySessionDto(Guid ApiKey, string Name, int OwnerUserId, string Status, long QueueRevision, long PlaybackRevision); public record PartySessionParticipantDto(int UserId, string Role, string JoinedAt); public record QueueResponseDto(long Revision, IEnumerable Items); diff --git a/src/Melodee.Cli/Command/AlbumImageIssuesCommand.cs b/src/Melodee.Cli/Command/AlbumImageIssuesCommand.cs index 65acaeed0..d10a08456 100644 --- a/src/Melodee.Cli/Command/AlbumImageIssuesCommand.cs +++ b/src/Melodee.Cli/Command/AlbumImageIssuesCommand.cs @@ -5,6 +5,7 @@ using Melodee.Common.Data.Models; using Melodee.Common.Data.Models.Extensions; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Plugins.Validation; using Melodee.Common.Utility; using Microsoft.EntityFrameworkCore; @@ -24,12 +25,13 @@ public class AlbumImageIssuesCommand : CommandBase protected override async Task ExecuteAsync(CommandContext context, AlbumImageIssuesSettings settings, CancellationToken cancellationToken) { using var scope = CreateServiceProvider().CreateScope(); + var imageProcessor = scope.ServiceProvider.GetRequiredService(); var dbContextFactory = scope.ServiceProvider.GetRequiredService>(); var configFactory = scope.ServiceProvider.GetRequiredService(); await using var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); var configuration = await configFactory.GetConfigurationAsync(cancellationToken); - var imageValidator = new ImageValidator(configuration); + var imageValidator = new ImageValidator(imageProcessor, configuration); var albums = await dbContext.Albums .Include(a => a.Artist) diff --git a/src/Melodee.Cli/Command/CommandBase.cs b/src/Melodee.Cli/Command/CommandBase.cs index 543fbe3a0..8b26e5a99 100644 --- a/src/Melodee.Cli/Command/CommandBase.cs +++ b/src/Melodee.Cli/Command/CommandBase.cs @@ -3,6 +3,7 @@ using Melodee.Cli.Configuration; using Melodee.Common.Configuration; using Melodee.Common.Data; +using Melodee.Common.Imaging; using Melodee.Common.Metadata; using Melodee.Common.Models.SearchEngines.ArtistSearchEngineServiceData; using Melodee.Common.Plugins.Scrobbling; @@ -116,6 +117,7 @@ protected ServiceProvider CreateServiceProvider() services.AddSingleton(SpotifyClientConfig.CreateDefault()); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/src/Melodee.Cli/Command/JobRunCommand.cs b/src/Melodee.Cli/Command/JobRunCommand.cs index 9121d0c65..191492cdd 100644 --- a/src/Melodee.Cli/Command/JobRunCommand.cs +++ b/src/Melodee.Cli/Command/JobRunCommand.cs @@ -4,6 +4,7 @@ using Melodee.Common.Constants; using Melodee.Common.Data; using Melodee.Common.Data.Models; +using Melodee.Common.Imaging; using Melodee.Common.Jobs; using Melodee.Common.Models.SearchEngines.ArtistSearchEngineServiceData; using Melodee.Common.Plugins.Scrobbling; @@ -259,7 +260,8 @@ private static JobBase CreateJob(Type jobType, IServiceProvider sp) sp.GetRequiredService(), sp.GetRequiredService>(), sp.GetRequiredService(), - sp.GetRequiredService()); + sp.GetRequiredService(), + sp.GetRequiredService()); } if (jobType == typeof(ArtistSearchEngineRepositoryHousekeepingJob)) diff --git a/src/Melodee.Cli/Command/ParseCommand.cs b/src/Melodee.Cli/Command/ParseCommand.cs index c7cbc3da8..b5d393d1d 100644 --- a/src/Melodee.Cli/Command/ParseCommand.cs +++ b/src/Melodee.Cli/Command/ParseCommand.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using Melodee.Cli.CommandSettings; using Melodee.Common.Configuration; +using Melodee.Common.Imaging; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Plugins.MetaData.Directory; @@ -23,12 +24,13 @@ protected override async Task ExecuteAsync(CommandContext context, ParseSet { using (var scope = CreateServiceProvider().CreateScope()) { + var imageProcessor = scope.ServiceProvider.GetRequiredService(); var configFactory = scope.ServiceProvider.GetRequiredService(); var config = await configFactory.GetConfigurationAsync(); var serializer = scope.ServiceProvider.GetRequiredService(); - var imageValidator = new ImageValidator(config); - var imageConvertor = new ImageConvertor(config); + var imageValidator = new ImageValidator(imageProcessor, config); + var imageConvertor = new ImageConvertor(imageProcessor, config); var albumValidator = new AlbumValidator(config); var fileInfo = new FileInfo(settings.Filename); @@ -50,7 +52,7 @@ protected override async Task ExecuteAsync(CommandContext context, ParseSet var cue = new CueSheet( serializer, [ - new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageConvertor, imageValidator, config) + new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageProcessor, imageConvertor, imageValidator, config) ], albumValidator, config); if (cue.DoesHandleFile(fileInfo.Directory.ToDirectorySystemInfo(), fileInfo.ToFileSystemInfo())) { @@ -99,7 +101,7 @@ protected override async Task ExecuteAsync(CommandContext context, ParseSet var sfv = new SimpleFileVerification(serializer, [ - new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageConvertor, imageValidator, config) + new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageProcessor, imageConvertor, imageValidator, config) ], new AlbumValidator(config), config); if (sfv.DoesHandleFile(fileInfo.Directory.ToDirectorySystemInfo(), fileInfo.ToFileSystemInfo())) { @@ -129,7 +131,7 @@ protected override async Task ExecuteAsync(CommandContext context, ParseSet var m3u = new M3UPlaylist(serializer, [ - new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageConvertor, imageValidator, config) + new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageProcessor, imageConvertor, imageValidator, config) ], albumValidator, config); if (m3u.DoesHandleFile(fileInfo.Directory.ToDirectorySystemInfo(), fileInfo.ToFileSystemInfo())) { diff --git a/src/Melodee.Cli/Command/ShowMpegInfoCommand.cs b/src/Melodee.Cli/Command/ShowMpegInfoCommand.cs index 08ab587b5..3c630b727 100644 --- a/src/Melodee.Cli/Command/ShowMpegInfoCommand.cs +++ b/src/Melodee.Cli/Command/ShowMpegInfoCommand.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using Melodee.Cli.CommandSettings; using Melodee.Common.Configuration; +using Melodee.Common.Imaging; using Melodee.Common.Metadata.AudioTags; using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Plugins.Validation; @@ -18,12 +19,13 @@ protected override async Task ExecuteAsync(CommandContext context, ShowMpeg { using (var scope = CreateServiceProvider().CreateScope()) { + var imageProcessor = scope.ServiceProvider.GetRequiredService(); var serializer = scope.ServiceProvider.GetRequiredService(); var configFactory = scope.ServiceProvider.GetRequiredService(); var config = await configFactory.GetConfigurationAsync(cancellationToken); - var imageValidator = new ImageValidator(config); - var imageConvertor = new ImageConvertor(config); + var imageValidator = new ImageValidator(imageProcessor, config); + var imageConvertor = new ImageConvertor(imageProcessor, config); var fileInfo = new FileInfo(settings.Filename); if (!fileInfo.Exists) diff --git a/src/Melodee.Cli/Command/ShowTagsCommand.cs b/src/Melodee.Cli/Command/ShowTagsCommand.cs index d1a0afd48..65ad92e53 100644 --- a/src/Melodee.Cli/Command/ShowTagsCommand.cs +++ b/src/Melodee.Cli/Command/ShowTagsCommand.cs @@ -1,6 +1,7 @@ using Melodee.Cli.CommandSettings; using Melodee.Common.Configuration; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Plugins.MetaData.Song; @@ -21,12 +22,13 @@ protected override async Task ExecuteAsync(CommandContext context, ShowTags { using (var scope = CreateServiceProvider().CreateScope()) { + var imageProcessor = scope.ServiceProvider.GetRequiredService(); var serializer = scope.ServiceProvider.GetRequiredService(); var configFactory = scope.ServiceProvider.GetRequiredService(); var config = await configFactory.GetConfigurationAsync(); - var imageValidator = new ImageValidator(config); - var imageConvertor = new ImageConvertor(config); + var imageValidator = new ImageValidator(imageProcessor, config); + var imageConvertor = new ImageConvertor(imageProcessor, config); var fileInfo = new FileInfo(settings.Filename); if (!fileInfo.Exists) @@ -43,7 +45,7 @@ protected override async Task ExecuteAsync(CommandContext context, ShowTags var isValid = false; - var metaTag = new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageConvertor, imageValidator, config); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(config, serializer), imageProcessor, imageConvertor, imageValidator, config); var tagResult = await metaTag.ProcessFileAsync(fileInfo.Directory!.ToDirectorySystemInfo(), FileSystemInfoExtensions.ToFileSystemInfo(fileInfo)); if (settings.OnlyTags.Nullify() != null) diff --git a/src/Melodee.Cli/Melodee.Cli.csproj b/src/Melodee.Cli/Melodee.Cli.csproj index e596be980..8079a7d7f 100644 --- a/src/Melodee.Cli/Melodee.Cli.csproj +++ b/src/Melodee.Cli/Melodee.Cli.csproj @@ -9,7 +9,7 @@ false $(NoWarn);NU1507 - 2.0.1 + 2.1.0 build$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) $(VersionPrefix).0 diff --git a/src/Melodee.Common/Imaging/IImageProcessor.cs b/src/Melodee.Common/Imaging/IImageProcessor.cs new file mode 100644 index 000000000..9e1781cbf --- /dev/null +++ b/src/Melodee.Common/Imaging/IImageProcessor.cs @@ -0,0 +1,74 @@ +namespace Melodee.Common.Imaging; + +/// +/// Centralized interface for all image processing operations, +/// abstracting the underlying imaging library. +/// +public interface IImageProcessor +{ + /// + /// Identifies image dimensions and format without fully decoding the image. + /// + Task IdentifyAsync(string filePath, CancellationToken cancellationToken = default); + + /// + /// Identifies image dimensions and format from an in-memory byte array. + /// + Task IdentifyAsync(ReadOnlyMemory imageBytes, CancellationToken cancellationToken = default); + + /// + /// Loads image dimensions from embedded picture data (synchronous). + /// + ImageDimensions? Identify(ReadOnlyMemory imageBytes); + + /// + /// Converts any supported image format to JPEG format bytes. + /// + byte[] ConvertToJpeg(ReadOnlyMemory imageBytes); + + /// + /// Converts any supported image format to GIF format bytes. + /// + Task ConvertToGifAsync(byte[] imageBytes, CancellationToken cancellationToken = default); + + /// + /// Resizes and pads an image to a square of the given target size using a transparent background. + /// + byte[] ResizeAndPadToSquare(ReadOnlyMemory imageBytes, int targetSize); + + /// + /// Resizes an image if it exceeds the given max dimensions, optionally saving as GIF. + /// + byte[] ResizeImageIfNeeded(ReadOnlyMemory imageBytes, int maxWidth, int maxHeight, bool saveAsGif); + + /// + /// Computes an average hash (perceptual hash) for the given image bytes. + /// + ulong ComputeAverageHash(ReadOnlyMemory imageBytes); + + /// + /// Computes a percentage-based similarity between two average hashes. + /// Returns a value between 0.0 and 100.0. + /// + double Similarity(ulong hash1, ulong hash2); + + /// + /// Computes the similarity between two image files (0.0 to 100.0). + /// + double Similarity(string path1, string path2); + + /// + /// Computes the similarity between two in-memory images (0.0 to 100.0). + /// + double Similarity(byte[] image1, byte[] image2); + + /// + /// Returns true if two images are identical (100% hash match). + /// + bool ImagesAreSame(string path1, string path2); + + /// + /// Returns true if two in-memory images are identical (100% hash match). + /// + bool ImagesAreSame(byte[] image1, byte[] image2); +} diff --git a/src/Melodee.Common/Imaging/ImageDimensions.cs b/src/Melodee.Common/Imaging/ImageDimensions.cs new file mode 100644 index 000000000..8aaf8e03d --- /dev/null +++ b/src/Melodee.Common/Imaging/ImageDimensions.cs @@ -0,0 +1,6 @@ +namespace Melodee.Common.Imaging; + +/// +/// Simple DTO representing the dimensions of an image. +/// +public sealed record ImageDimensions(int Width, int Height, string? Format = null); diff --git a/src/Melodee.Common/Imaging/ImageHasher.cs b/src/Melodee.Common/Imaging/ImageHasher.cs index 3ed51a5c9..29777ca9f 100644 --- a/src/Melodee.Common/Imaging/ImageHasher.cs +++ b/src/Melodee.Common/Imaging/ImageHasher.cs @@ -1,167 +1,75 @@ -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; -using sixLablorsImageSharp = SixLabors.ImageSharp; - namespace Melodee.Common.Imaging; /// /// Contains a variety of methods useful in generating image hashes for image comparison /// and recognition. /// Credit for the AverageHash implementation to David Oftedal of the University of Oslo. +/// +/// NOTE: This class is now a thin wrapper around . +/// Prefer injecting directly for new code. /// public static class ImageHasher { - #region Private constants and utility methods - - /// - /// Bitcounts array used for BitCount method (used in Similarity comparisons). - /// Don't try to read this or understand it, I certainly don't. Credit goes to - /// David Oftedal of the University of Oslo, Norway for this. - /// http://folk.uio.no/davidjo/computing.php - /// - private static readonly byte[] bitCounts = - [ - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, - 2, 3, 3, 4, - 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, - 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, - 4, 5, 5, 6, - 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, - 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, - 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, - 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 - ]; - - /// - /// Counts bits (duh). Utility function for similarity. - /// I wouldn't try to understand this. I just copy-pasta'd it - /// from Oftedal's implementation. It works. - /// - /// The hash we are counting. - /// The total bit count. - private static uint BitCount(ulong num) - { - uint count = 0; - for (; num > 0; num >>= 8) - { - count += bitCounts[num & 0xff]; - } - - return count; - } - - private static ulong _averageHash; - - #endregion Private constants and utility methods - - #region Public interface methods - /// /// Generate a hash for the image to be able to find like/matching images. /// + /// The image processor instance. /// Image bytes /// Hash of Image - public static ulong AverageHash(byte[] bytes) + public static ulong AverageHash(IImageProcessor imageProcessor, byte[] bytes) { - _averageHash = 0; - using var image = sixLablorsImageSharp.Image.Load(bytes); - { - image.Mutate(ctx => ctx.Resize(8, 8).Grayscale()); - image.ProcessPixelRows(static pixelAccessor => - { - var grayscale = new byte[64]; - uint averageValue = 0; - for (var y = 0; y < 8; y++) - { - var pixelRowSpan = pixelAccessor.GetRowSpan(y); - for (var x = 0; x < 8; x++) - { - var pixel = pixelRowSpan[x].PackedValue; - var gray = (pixel & 0x00ff0000) >> 16; - gray += (pixel & 0x0000ff00) >> 8; - gray += pixel & 0x000000ff; - gray /= 12; - grayscale[x + y * 8] = (byte)gray; - averageValue += gray; - } - } - - averageValue /= 64; - for (var i = 0; i < 64; i++) - { - if (grayscale[i] >= averageValue) - { - _averageHash |= 1UL << (63 - i); - } - } - }); - } - return _averageHash; + return imageProcessor.ComputeAverageHash(bytes); } /// /// Computes the average hash of the image content in the given file. /// + /// The image processor instance. /// Path to the input file. /// The hash of the input file's image content. - public static ulong AverageHash(string path) + public static ulong AverageHash(IImageProcessor imageProcessor, string path) { - return AverageHash(File.ReadAllBytes(path)); + return imageProcessor.ComputeAverageHash(File.ReadAllBytes(path)); } - public static bool ImagesAreSame(string path1, string path2) + public static bool ImagesAreSame(IImageProcessor imageProcessor, string path1, string path2) { - return Similarity(path1, path2) == 100; + return imageProcessor.ImagesAreSame(path1, path2); } - public static bool ImagesAreSame(byte[] image1, byte[] image2) + public static bool ImagesAreSame(IImageProcessor imageProcessor, byte[] image1, byte[] image2) { - return Similarity(image1, image2) == 100; + return imageProcessor.ImagesAreSame(image1, image2); } /// /// Returns a percentage-based similarity value between the two given hashes. The higher /// the percentage, the closer the hashes are to being identical. /// + /// The image processor instance. /// The first hash. /// The second hash. /// The similarity percentage. - public static double Similarity(ulong hash1, ulong hash2) + public static double Similarity(IImageProcessor imageProcessor, ulong hash1, ulong hash2) { - return (64 - BitCount(hash1 ^ hash2)) * 100 / 64.0; + return imageProcessor.Similarity(hash1, hash2); } /// /// Returns a percentage-based similarity value between the image content of the two given /// files. The higher the percentage, the closer the image contents are to being identical. /// - /// The first image file. - /// The second image file. - /// The similarity percentage. - public static double Similarity(string path1, string path2) + public static double Similarity(IImageProcessor imageProcessor, string path1, string path2) { - var hash1 = AverageHash(path1); - var hash2 = AverageHash(path2); - return Similarity(hash1, hash2); + return imageProcessor.Similarity(path1, path2); } /// /// Returns a percentage-based similarity value between the image content of the two given /// files. The higher the percentage, the closer the image contents are to being identical. /// - /// The first image bytes. - /// The second image bytes. - /// The similarity percentage. - public static double Similarity(byte[] image1, byte[] image2) + public static double Similarity(IImageProcessor imageProcessor, byte[] image1, byte[] image2) { - var hash1 = AverageHash(image1); - var hash2 = AverageHash(image2); - return Similarity(hash1, hash2); + return imageProcessor.Similarity(image1, image2); } - - #endregion Public interface methods } diff --git a/src/Melodee.Common/Imaging/ImageProcessor.cs b/src/Melodee.Common/Imaging/ImageProcessor.cs new file mode 100644 index 000000000..29bf46380 --- /dev/null +++ b/src/Melodee.Common/Imaging/ImageProcessor.cs @@ -0,0 +1,346 @@ +using SkiaSharp; + +namespace Melodee.Common.Imaging; + +/// +/// Image processing implementation using SkiaSharp. +/// Provides centralized image identification, conversion, resizing, and hashing. +/// +public sealed class ImageProcessor : IImageProcessor +{ + private static readonly byte[] bitCounts = + [ + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, + 2, 3, 3, 4, + 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, + 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, + 4, 5, 5, 6, + 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, + 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, + 3, 4, 4, 5, + 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, + 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 + ]; + + public Task IdentifyAsync(string filePath, CancellationToken cancellationToken = default) + { + if (!File.Exists(filePath)) + { + return Task.FromResult(null); + } + + try + { + using var stream = File.OpenRead(filePath); + var codec = SKCodec.Create(stream); + if (codec == null) + { + return Task.FromResult(null); + } + + var info = codec.Info; + return Task.FromResult(new ImageDimensions(info.Width, info.Height, codec.EncodedFormat.ToString())); + } + catch + { + return Task.FromResult(null); + } + } + + public Task IdentifyAsync(ReadOnlyMemory imageBytes, CancellationToken cancellationToken = default) + { + if (imageBytes.IsEmpty) + { + return Task.FromResult(null); + } + + try + { + using var stream = new SKMemoryStream(imageBytes.ToArray()); + using var codec = SKCodec.Create(stream); + if (codec == null) + { + return Task.FromResult(null); + } + + var info = codec.Info; + return Task.FromResult(new ImageDimensions(info.Width, info.Height, codec.EncodedFormat.ToString())); + } + catch + { + return Task.FromResult(null); + } + } + + public ImageDimensions? Identify(ReadOnlyMemory imageBytes) + { + if (imageBytes.IsEmpty) + { + return null; + } + + try + { + using var stream = new SKMemoryStream(imageBytes.ToArray()); + using var codec = SKCodec.Create(stream); + if (codec == null) + { + return null; + } + + var info = codec.Info; + return new ImageDimensions(info.Width, info.Height, codec.EncodedFormat.ToString()); + } + catch + { + return null; + } + } + + public byte[] ConvertToJpeg(ReadOnlyMemory imageBytes) + { + if (imageBytes.IsEmpty) + { + return imageBytes.ToArray(); + } + + using var bitmap = SKBitmap.Decode(imageBytes.ToArray()); + if (bitmap == null) + { + return imageBytes.ToArray(); + } + + using var image = SKImage.FromBitmap(bitmap); + using var data = image.Encode(SKEncodedImageFormat.Jpeg, 85); + if (data == null) + { + return imageBytes.ToArray(); + } + + return data.ToArray(); + } + + public async Task ConvertToGifAsync(byte[] imageBytes, CancellationToken cancellationToken = default) + { + if (imageBytes.Length == 0) + { + return imageBytes; + } + + using var bitmap = SKBitmap.Decode(imageBytes); + if (bitmap == null) + { + return imageBytes; + } + + using var image = SKImage.FromBitmap(bitmap); + using var data = image.Encode(SKEncodedImageFormat.Gif, 100); + if (data == null) + { + return imageBytes; + } + + return await Task.FromResult(data.ToArray()); + } + + public byte[] ResizeAndPadToSquare(ReadOnlyMemory imageBytes, int targetSize) + { + if (imageBytes.IsEmpty || targetSize <= 0) + { + return imageBytes.ToArray(); + } + + using var sourceBitmap = SKBitmap.Decode(imageBytes.ToArray()); + if (sourceBitmap == null) + { + return imageBytes.ToArray(); + } + + var info = new SKImageInfo(targetSize, targetSize, SKColorType.Rgba8888, SKAlphaType.Premul); + using var surface = SKSurface.Create(info); + if (surface == null) + { + return imageBytes.ToArray(); + } + + var canvas = surface.Canvas; + canvas.Clear(SKColors.Transparent); + + // Calculate scaling to fit within targetSize while maintaining aspect ratio + float scale = Math.Min( + (float)targetSize / sourceBitmap.Width, + (float)targetSize / sourceBitmap.Height); + + int newWidth = (int)(sourceBitmap.Width * scale); + int newHeight = (int)(sourceBitmap.Height * scale); + + // Center the scaled image + int x = (targetSize - newWidth) / 2; + int y = (targetSize - newHeight) / 2; + + var destRect = new SKRectI(x, y, x + newWidth, y + newHeight); + var srcRect = new SKRectI(0, 0, sourceBitmap.Width, sourceBitmap.Height); + + canvas.DrawBitmap(sourceBitmap, srcRect, destRect); + canvas.Flush(); + + using var image = surface.Snapshot(); + using var data = image.Encode(SKEncodedImageFormat.Jpeg, 85); + if (data == null) + { + return imageBytes.ToArray(); + } + + return data.ToArray(); + } + + public byte[] ResizeImageIfNeeded(ReadOnlyMemory imageBytes, int maxWidth, int maxHeight, bool saveAsGif) + { + if (imageBytes.IsEmpty) + { + return imageBytes.ToArray(); + } + + using var sourceBitmap = SKBitmap.Decode(imageBytes.ToArray()); + if (sourceBitmap == null) + { + return imageBytes.ToArray(); + } + + if (sourceBitmap.Width <= maxWidth && sourceBitmap.Height <= maxHeight) + { + // No resize needed, just re-encode if format change requested + using var srcImage = SKImage.FromBitmap(sourceBitmap); + using var data = srcImage.Encode(saveAsGif ? SKEncodedImageFormat.Gif : SKEncodedImageFormat.Jpeg, 85); + if (data == null) + { + return imageBytes.ToArray(); + } + + return data.ToArray(); + } + + // Calculate new size maintaining aspect ratio + float scale = Math.Min( + (float)maxWidth / sourceBitmap.Width, + (float)maxHeight / sourceBitmap.Height); + + int newWidth = (int)(sourceBitmap.Width * scale); + int newHeight = (int)(sourceBitmap.Height * scale); + + var resized = sourceBitmap.Resize(new SKImageInfo(newWidth, newHeight, sourceBitmap.ColorType, sourceBitmap.AlphaType), new SKSamplingOptions(SKCubicResampler.Mitchell)); + if (resized == null) + { + return imageBytes.ToArray(); + } + + using (resized) + { + using var image = SKImage.FromBitmap(resized); + using var data = image.Encode(saveAsGif ? SKEncodedImageFormat.Gif : SKEncodedImageFormat.Jpeg, 85); + if (data == null) + { + return imageBytes.ToArray(); + } + + return data.ToArray(); + } + } + + public ulong ComputeAverageHash(ReadOnlyMemory imageBytes) + { + if (imageBytes.IsEmpty) + { + return 0; + } + + using var sourceBitmap = SKBitmap.Decode(imageBytes.ToArray()); + if (sourceBitmap == null) + { + return 0; + } + + // Resize to 8x8 and convert to grayscale + var resized = sourceBitmap.Resize(new SKImageInfo(8, 8, sourceBitmap.ColorType, sourceBitmap.AlphaType), new SKSamplingOptions(SKCubicResampler.Mitchell)); + if (resized == null) + { + return 0; + } + + using (resized) + { + var grayBytes = new byte[64]; + uint averageValue = 0; + + int i = 0; + for (int y = 0; y < 8; y++) + { + for (int x = 0; x < 8; x++) + { + var color = resized.GetPixel(x, y); + // Rec709 luminance formula: 0.2126 R + 0.7152 G + 0.0722 B + byte gray = (byte)((color.Red * 54 + color.Green * 183 + color.Blue * 19) >> 8); + grayBytes[i] = gray; + averageValue += gray; + i++; + } + } + + averageValue /= 64; + + ulong hash = 0; + for (i = 0; i < 64; i++) + { + if (grayBytes[i] >= averageValue) + { + hash |= 1UL << (63 - i); + } + } + + return hash; + } + } + + public double Similarity(ulong hash1, ulong hash2) + { + return (64 - BitCount(hash1 ^ hash2)) * 100 / 64.0; + } + + public double Similarity(string path1, string path2) + { + var hash1 = ComputeAverageHash(File.ReadAllBytes(path1)); + var hash2 = ComputeAverageHash(File.ReadAllBytes(path2)); + return Similarity(hash1, hash2); + } + + public double Similarity(byte[] image1, byte[] image2) + { + var hash1 = ComputeAverageHash(image1); + var hash2 = ComputeAverageHash(image2); + return Similarity(hash1, hash2); + } + + public bool ImagesAreSame(string path1, string path2) + { + return Similarity(path1, path2) == 100; + } + + public bool ImagesAreSame(byte[] image1, byte[] image2) + { + return Similarity(image1, image2) == 100; + } + + private static uint BitCount(ulong num) + { + uint count = 0; + for (; num > 0; num >>= 8) + { + count += bitCounts[num & 0xff]; + } + + return count; + } +} diff --git a/src/Melodee.Common/Jobs/ArtistHousekeepingJob.cs b/src/Melodee.Common/Jobs/ArtistHousekeepingJob.cs index b1400436e..9b781ffeb 100644 --- a/src/Melodee.Common/Jobs/ArtistHousekeepingJob.cs +++ b/src/Melodee.Common/Jobs/ArtistHousekeepingJob.cs @@ -5,6 +5,7 @@ using Melodee.Common.Data.Models.Extensions; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Validation; using Melodee.Common.Services; @@ -51,7 +52,8 @@ public class ArtistHousekeepingJob( ArtistService artistService, IDbContextFactory contextFactory, ArtistImageSearchEngineService imageSearchEngine, - IHttpClientFactory httpClientFactory) : JobBase(logger, configurationFactory) + IHttpClientFactory httpClientFactory, + IImageProcessor imageProcessor) : JobBase(logger, configurationFactory) { public override async Task Execute(IJobExecutionContext context) { @@ -60,7 +62,7 @@ public override async Task Execute(IJobExecutionContext context) var batchSize = configuration.GetValue(SettingRegistry.DefaultsBatchSize); var now = Instant.FromDateTimeUtc(DateTime.UtcNow); var httpClient = httpClientFactory.CreateClient(); - var imageValidator = new ImageValidator(configuration); + var imageValidator = new ImageValidator(imageProcessor, configuration); await using (var scopedContext = await contextFactory.CreateDbContextAsync(context.CancellationToken)) { var readyToProcessStatus = SafeParser.ToNumber(MetaDataModelStatus.ReadyToProcess); diff --git a/src/Melodee.Common/Melodee.Common.csproj b/src/Melodee.Common/Melodee.Common.csproj index b070beed3..fd980c509 100644 --- a/src/Melodee.Common/Melodee.Common.csproj +++ b/src/Melodee.Common/Melodee.Common.csproj @@ -9,7 +9,7 @@ $(NoWarn);NU1507 - 2.0.1 + 2.1.0 build$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) $(VersionPrefix).0 $(VersionPrefix).0 @@ -71,7 +71,8 @@ - + + diff --git a/src/Melodee.Common/Metadata/MelodeeMetadataMaker.cs b/src/Melodee.Common/Metadata/MelodeeMetadataMaker.cs index dbfc68f1a..13fcc73c3 100644 --- a/src/Melodee.Common/Metadata/MelodeeMetadataMaker.cs +++ b/src/Melodee.Common/Metadata/MelodeeMetadataMaker.cs @@ -4,6 +4,7 @@ using Melodee.Common.Constants; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Models.SpecialArtists; @@ -17,7 +18,6 @@ using Melodee.Common.Services.SearchEngines; using Melodee.Common.Utility; using Serilog; -using SixLabors.ImageSharp; using ImageInfo = Melodee.Common.Models.ImageInfo; namespace Melodee.Common.Metadata; @@ -29,7 +29,8 @@ public class MelodeeMetadataMaker( ArtistSearchEngineService artistSearchEngineService, AlbumImageSearchEngineService albumImageSearchEngineService, IHttpClientFactory httpClientFactory, - MediaEditService mediaEditService) + MediaEditService mediaEditService, + IImageProcessor imageProcessor) { /// /// For a given directory generate a Melodee Metadata file (melodee.json). Does not modify files in place. @@ -73,9 +74,9 @@ public class MelodeeMetadataMaker( var configElapsedMs = Stopwatch.GetElapsedTime(configStartTicks).TotalMilliseconds; var albumValidator = new AlbumValidator(configuration); - var imageValidator = new ImageValidator(configuration); - var imageConvertor = new ImageConvertor(configuration); - var songPlugin = new AtlMetaTag(new MetaTagsProcessor(configuration, serializer), imageConvertor, imageValidator, configuration); + var imageValidator = new ImageValidator(imageProcessor, configuration); + var imageConvertor = new ImageConvertor(imageProcessor, configuration); + var songPlugin = new AtlMetaTag(new MetaTagsProcessor(configuration, serializer), imageProcessor, imageConvertor, imageValidator, configuration); var mp3Files = new Mp3Files([songPlugin], albumValidator, serializer, logger, configuration); var processStartTicks = Stopwatch.GetTimestamp(); @@ -148,10 +149,10 @@ public class MelodeeMetadataMaker( continue; } - var imageInfo = await Image.LoadAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); + var imageInfo = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); var crc32 = Crc32.Calculate(fileInfo); - if (albumImages.Any(x => x.IsCrcHashMatch(crc32))) + if (imageInfo == null || albumImages.Any(x => x.IsCrcHashMatch(crc32))) { continue; } @@ -182,7 +183,7 @@ public class MelodeeMetadataMaker( else { var foundAlbumImages = - (await album.FindImages(songPlugin, duplicateThreshold, imageConvertor, imageValidator, + (await album.FindImages(imageProcessor, songPlugin, duplicateThreshold, imageConvertor, imageValidator, configuration.GetValue(SettingRegistry.ProcessingDoDeleteOriginal), cancellationToken) .ConfigureAwait(false)).ToArray(); if (foundAlbumImages.Length != 0) @@ -355,23 +356,26 @@ public class MelodeeMetadataMaker( cancellationToken).ConfigureAwait(false)) { var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image.IdentifyAsync(albumImageFromSearchFileName, cancellationToken) + var imageInfo = await imageProcessor.IdentifyAsync(albumImageFromSearchFileName, cancellationToken) .ConfigureAwait(false); - album.Images = new List + if (imageInfo != null) { - new() + album.Images = new List { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; - Log.Debug("[{Name}] Downloaded album image [{MediaUrl}]", nameof(MelodeeMetadataMaker), - imageSearchResult.MediaUrl); + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + Log.Debug("[{Name}] Downloaded album image [{MediaUrl}]", nameof(MelodeeMetadataMaker), + imageSearchResult.MediaUrl); + } } } else diff --git a/src/Melodee.Common/Migrations/20250207191118_InitialMigration.Designer.cs b/src/Melodee.Common/Migrations/20250207191118_InitialMigration.Designer.cs deleted file mode 100644 index 8dd9b1b7f..000000000 --- a/src/Melodee.Common/Migrations/20250207191118_InitialMigration.Designer.cs +++ /dev/null @@ -1,3091 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250207191118_InitialMigration")] - partial class InitialMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("a7d0993b-992a-456c-bf1d-fbcd7625396c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("bf06be32-c95f-4a5c-b241-752daef0478d"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("0bc1f88c-11ea-4750-9a34-5262473bb0ec"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("27bcb519-d9fd-4b59-97f9-82289b5be4b6"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("HasCustomImage") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("c19e1e36-6e24-405f-a62f-01a9ffb0a819"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("57ea2ca9-f69e-47ef-8dd3-0d0169c06641"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("51c48263-2e2c-4983-b2ef-0885ba28b825"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("ca83a05f-29c9-4496-bcf4-d423bd7b6cdc"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("74b2825e-3538-4d23-842e-041424df1a12"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("cba92f59-00e1-4ba9-9e7e-fbc097b5f856"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("f4ba33f8-19b1-43a2-96e9-c85dd38fbaf3"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("8ab4a64c-0d02-440f-94a2-ec5fdaad35b9"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("e308f17a-9bbe-4f8d-8dcd-b3f558579c3c"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("fd577639-7f89-413c-9c0f-70526a9d4c20"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("9c96bfb9-f23d-4156-93c1-c4365187e883"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("add0ef4c-7a53-4807-afd6-1127f3f517fa"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("54374002-9e27-4d2d-ba98-95e7c0872f95"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("13c8563c-2b39-4366-b53d-75d3d4cc5523"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("4371ab77-1572-4c33-8bdb-a4906ad3de8e"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("78fbec1a-7618-4c02-b25b-66584048274c"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("3a2c2907-4e07-4322-aa97-a3514165f864"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("901a9ec0-8f52-4544-b725-e92ba2373f9c"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("682c1e5e-04a9-4ef0-935a-7258490d1fb2"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("0fcb90aa-8766-497c-91ae-132caba18bbc"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("0d6683f6-d308-4639-a4bb-d5ff56edcae6"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("8b62c0c2-fef3-42db-9a5b-30f825a6cd9f"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("242613aa-3fc0-47e9-9d50-356603ad21c1"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("5de830d8-b292-45c6-9bf1-d235de3fdda3"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("05f0efbe-033b-4f15-ae14-141eace3320a"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("73204192-be65-4336-8308-cd85e62d6c81"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("0df52524-3a13-4ddc-8485-1cab72d53303"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("52f8190e-6b04-4882-9963-e5d30903351f"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("c0fdf045-dcdd-4c0a-bb13-64dc55324438"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("b30c6aa3-0e2f-4e9d-99b1-4b2f384e95bf"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("68684128-a20a-4ff4-bb95-3c7b87413079"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("8fe93224-7b71-4fb2-b17d-e93df6d279d5"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("a07c7cec-67a2-489e-b8d9-c95b7a696d61"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("7d2eeefc-f8bc-4e0d-914c-0c143ba5681a"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("145568f9-9f69-4b47-8462-589540e089e9"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("8e41511f-5e92-4b23-b947-bc04c995afc2"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("b40fcf93-f38b-4bd1-9718-dc27e69d0b70"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("9acbd105-a4aa-4297-b4ba-7b5b5e00aaae"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("58eab599-70c5-4e01-9491-374bc5f940b3"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("fe82fba7-a616-466c-a414-619eda2f0f73"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("4b87fa8d-77d1-4825-8957-03084f959a78"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("05b1dd4a-c821-4022-be7d-d95f02c20196"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("5460f9e6-425f-4aea-ac55-e98e6f55ef86"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("1cff105e-34e2-408b-858b-e422edca3db7"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("bd97ecea-f5ff-42d7-8179-14a76af44541"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("204605c7-d29d-4e5c-98fb-2b4f0a9c4a67"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("207d0318-0349-4428-99b9-c8f7ac25ea28"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 100, - ApiKey = new Guid("4c6739bc-61c8-4c66-920b-cc135f87d7bf"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("cc495ed2-bbad-44f3-bb51-6f547b36a5f5"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("1ece978d-9447-4058-919c-39592a74276c"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("f56ad731-8b43-40f4-84d4-a5032320dafb"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("232447a6-f4d7-43f9-ace1-154167c7fab3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("875b53cc-2302-4400-8389-eb5406b69832"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("9c38eb9d-6847-403b-bb55-c23ab235ed2a"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("0a30b39f-9fe3-492f-a980-c8dc313e707c"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("9e8a1765-2be0-46df-93da-ea772c299a3c"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("4ebad197-6fc2-454c-92f7-50c16bf2c84d"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("b3acd683-1e94-4f75-aefd-59fe23e633ac"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("4623b714-d3ea-4611-a0fb-842cdbfb287b"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("c92d47dd-6f4f-4be4-aba8-1174ec6efedb"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("6e699c20-51c4-4c06-8fe9-11aa750a6588"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("be3fa34e-cf40-4ec7-b25d-3ae658d1a3c8"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("185eb3f8-62c6-4ec0-ad0c-7797839e6dba"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("018e7cf8-6db0-445b-b766-978ca43673da"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("7ef3799b-24cf-4e29-aba8-b43cb51835ec"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("c479de34-818d-4564-9f89-9560bd8ffcb4"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("8054da9c-5bd0-43a4-8cef-2fae86f30bfd"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("60e38c97-4bb8-4867-bfff-40be4c8b96c4"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("95791adc-da25-44ea-9113-21ad610760aa"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("d86c90ad-7515-4516-b46f-d0474231144c"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("0ae4be96-bab9-4646-bce2-4e1985a8bd94"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("ff1f0dc9-8194-4d14-906b-a4354cddb7d6"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("a2b77237-941a-43fb-9692-7a6973c0f598"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("51de0ffb-e287-4b57-8a05-f45575ec5353"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("f2a68d3e-dd6c-4563-9769-09959634c599"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("8128acee-90e9-458a-8178-ab1b68fcf331"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("d55149f3-0b78-4bdc-b403-8faa86832a46"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("3e4cd1a5-7c52-4fc7-87c9-c29f62d0a17b"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("7e468a9e-f700-4d5b-91fb-663cab09b275"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("8f59432d-f5a5-44f5-a937-e5ef37b0192a"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1001, - ApiKey = new Guid("eb1c90fa-a548-4d8e-a013-11dac51a02cb"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("f0c04a47-7ee9-4669-b629-47e04dcc04a1"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("153003c8-8f6e-47fc-975e-5337dbf3899a"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("77d09e6b-685d-4f5b-ab6b-d5cb2739caf6"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("22425a3a-85be-4524-a30e-813f6c34d9c3"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("03ad6c13-132b-43c5-b8f5-6e3b4fa9aa9a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("68647ce0-97ac-4e67-81b7-68da8dd41fd1"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("7dd4d448-802d-4b14-82c1-e75c893c0ec2"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("a1cbc9d8-e407-4dc5-84ad-f86812434182"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("71dc2fcd-00e6-4094-8112-4610d47a309b"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250207191118_InitialMigration.cs b/src/Melodee.Common/Migrations/20250207191118_InitialMigration.cs deleted file mode 100644 index a64e5d6b6..000000000 --- a/src/Melodee.Common/Migrations/20250207191118_InitialMigration.cs +++ /dev/null @@ -1,1273 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class InitialMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Libraries", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ArtistCount = table.Column(type: "integer", nullable: true), - AlbumCount = table.Column(type: "integer", nullable: true), - SongCount = table.Column(type: "integer", nullable: true), - Path = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - Type = table.Column(type: "integer", nullable: false), - LastScanAt = table.Column(type: "timestamp with time zone", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Libraries", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "RadioStations", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - StreamUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - HomePageUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_RadioStations", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "SearchHistories", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - ByUserId = table.Column(type: "integer", nullable: false), - ByUserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - SearchQuery = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - FoundArtistsCount = table.Column(type: "integer", nullable: false), - FoundAlbumsCount = table.Column(type: "integer", nullable: false), - FoundSongsCount = table.Column(type: "integer", nullable: false), - FoundOtherItems = table.Column(type: "integer", nullable: false), - SearchDurationInMs = table.Column(type: "double precision", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_SearchHistories", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Settings", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Key = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), - Comment = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Category = table.Column(type: "integer", nullable: true), - Value = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Settings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - UserNameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Email = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - EmailNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - PublicKey = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - PasswordEncrypted = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - LastLoginAt = table.Column(type: "timestamp with time zone", nullable: true), - LastActivityAt = table.Column(type: "timestamp with time zone", nullable: true), - IsAdmin = table.Column(type: "boolean", nullable: false), - IsEditor = table.Column(type: "boolean", nullable: false), - HasSettingsRole = table.Column(type: "boolean", nullable: false), - HasDownloadRole = table.Column(type: "boolean", nullable: false), - HasUploadRole = table.Column(type: "boolean", nullable: false), - HasPlaylistRole = table.Column(type: "boolean", nullable: false), - HasCoverArtRole = table.Column(type: "boolean", nullable: false), - HasCommentRole = table.Column(type: "boolean", nullable: false), - HasPodcastRole = table.Column(type: "boolean", nullable: false), - HasStreamRole = table.Column(type: "boolean", nullable: false), - HasJukeboxRole = table.Column(type: "boolean", nullable: false), - HasShareRole = table.Column(type: "boolean", nullable: false), - IsScrobblingEnabled = table.Column(type: "boolean", nullable: false), - LastFmSessionKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), - HatedGenres = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Artists", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - SortName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - RealName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Directory = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - Roles = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - AlbumCount = table.Column(type: "integer", nullable: false), - SongCount = table.Column(type: "integer", nullable: false), - LibraryId = table.Column(type: "integer", nullable: false), - Biography = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - ImageCount = table.Column(type: "integer", nullable: true), - MetaDataStatus = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - PlayedCount = table.Column(type: "integer", nullable: false), - ItunesId = table.Column(type: "text", nullable: true), - AmgId = table.Column(type: "text", nullable: true), - DiscogsId = table.Column(type: "text", nullable: true), - WikiDataId = table.Column(type: "text", nullable: true), - MusicBrainzId = table.Column(type: "uuid", nullable: true), - LastFmId = table.Column(type: "text", nullable: true), - SpotifyId = table.Column(type: "text", nullable: true), - CalculatedRating = table.Column(type: "numeric", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Artists", x => x.Id); - table.ForeignKey( - name: "FK_Artists_Libraries_LibraryId", - column: x => x.LibraryId, - principalTable: "Libraries", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "LibraryScanHistories", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LibraryId = table.Column(type: "integer", nullable: false), - ForArtistId = table.Column(type: "integer", nullable: true), - ForAlbumId = table.Column(type: "integer", nullable: true), - FoundArtistsCount = table.Column(type: "integer", nullable: false), - FoundAlbumsCount = table.Column(type: "integer", nullable: false), - FoundSongsCount = table.Column(type: "integer", nullable: false), - DurationInMs = table.Column(type: "double precision", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_LibraryScanHistories", x => x.Id); - table.ForeignKey( - name: "FK_LibraryScanHistories_Libraries_LibraryId", - column: x => x.LibraryId, - principalTable: "Libraries", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Players", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - UserAgent = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - UserId = table.Column(type: "integer", nullable: false), - Client = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), - IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - LastSeenAt = table.Column(type: "timestamp with time zone", nullable: false), - MaxBitRate = table.Column(type: "integer", nullable: true), - ScrobbleEnabled = table.Column(type: "boolean", nullable: false), - TranscodingId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Hostname = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Players", x => x.Id); - table.ForeignKey( - name: "FK_Players_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Shares", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - ShareIds = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - ExpiresAt = table.Column(type: "timestamp with time zone", nullable: false), - IsDownloadable = table.Column(type: "boolean", nullable: false), - LastVisitedAt = table.Column(type: "timestamp with time zone", nullable: true), - VisitCount = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Shares", x => x.Id); - table.ForeignKey( - name: "FK_Shares_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Albums", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ArtistId = table.Column(type: "integer", nullable: false), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - SortName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - AlbumStatus = table.Column(type: "smallint", nullable: false), - MetaDataStatus = table.Column(type: "integer", nullable: false), - ImageCount = table.Column(type: "integer", nullable: true), - AlbumType = table.Column(type: "smallint", nullable: false), - OriginalReleaseDate = table.Column(type: "date", nullable: true), - ReleaseDate = table.Column(type: "date", nullable: false), - IsCompilation = table.Column(type: "boolean", nullable: false), - SongCount = table.Column(type: "smallint", nullable: true), - Duration = table.Column(type: "double precision", nullable: false), - Genres = table.Column(type: "text[]", maxLength: 2000, nullable: true), - Moods = table.Column(type: "text[]", maxLength: 2000, nullable: true), - Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - ReplayGain = table.Column(type: "double precision", nullable: true), - ReplayPeak = table.Column(type: "double precision", nullable: true), - Directory = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - PlayedCount = table.Column(type: "integer", nullable: false), - ItunesId = table.Column(type: "text", nullable: true), - AmgId = table.Column(type: "text", nullable: true), - DiscogsId = table.Column(type: "text", nullable: true), - WikiDataId = table.Column(type: "text", nullable: true), - MusicBrainzId = table.Column(type: "uuid", nullable: true), - LastFmId = table.Column(type: "text", nullable: true), - SpotifyId = table.Column(type: "text", nullable: true), - CalculatedRating = table.Column(type: "numeric", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Albums", x => x.Id); - table.ForeignKey( - name: "FK_Albums_Artists_ArtistId", - column: x => x.ArtistId, - principalTable: "Artists", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "ArtistRelation", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ArtistId = table.Column(type: "integer", nullable: false), - RelatedArtistId = table.Column(type: "integer", nullable: false), - ArtistRelationType = table.Column(type: "integer", nullable: false), - RelationStart = table.Column(type: "timestamp with time zone", nullable: true), - RelationEnd = table.Column(type: "timestamp with time zone", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ArtistRelation", x => x.Id); - table.ForeignKey( - name: "FK_ArtistRelation_Artists_ArtistId", - column: x => x.ArtistId, - principalTable: "Artists", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ArtistRelation_Artists_RelatedArtistId", - column: x => x.RelatedArtistId, - principalTable: "Artists", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserArtists", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - ArtistId = table.Column(type: "integer", nullable: false), - IsStarred = table.Column(type: "boolean", nullable: false), - IsHated = table.Column(type: "boolean", nullable: false), - StarredAt = table.Column(type: "timestamp with time zone", nullable: true), - Rating = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserArtists", x => x.Id); - table.ForeignKey( - name: "FK_UserArtists_Artists_ArtistId", - column: x => x.ArtistId, - principalTable: "Artists", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserArtists_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Songs", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - AlbumId = table.Column(type: "integer", nullable: false), - Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - TitleSort = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - TitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Genres = table.Column(type: "text[]", maxLength: 2000, nullable: true), - Moods = table.Column(type: "text[]", maxLength: 2000, nullable: true), - Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - ReplayGain = table.Column(type: "double precision", nullable: true), - ReplayPeak = table.Column(type: "double precision", nullable: true), - ImageCount = table.Column(type: "integer", nullable: true), - SongNumber = table.Column(type: "integer", nullable: false), - FileName = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), - Lyrics = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - FileSize = table.Column(type: "bigint", nullable: false), - FileHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), - PartTitles = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - Duration = table.Column(type: "double precision", nullable: false), - SamplingRate = table.Column(type: "integer", nullable: false), - BitRate = table.Column(type: "integer", nullable: false), - BitDepth = table.Column(type: "integer", nullable: false), - BPM = table.Column(type: "integer", nullable: false), - ContentType = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ChannelCount = table.Column(type: "integer", nullable: true), - IsVbr = table.Column(type: "boolean", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - PlayedCount = table.Column(type: "integer", nullable: false), - ItunesId = table.Column(type: "text", nullable: true), - AmgId = table.Column(type: "text", nullable: true), - DiscogsId = table.Column(type: "text", nullable: true), - WikiDataId = table.Column(type: "text", nullable: true), - MusicBrainzId = table.Column(type: "uuid", nullable: true), - LastFmId = table.Column(type: "text", nullable: true), - SpotifyId = table.Column(type: "text", nullable: true), - CalculatedRating = table.Column(type: "numeric", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Songs", x => x.Id); - table.ForeignKey( - name: "FK_Songs_Albums_AlbumId", - column: x => x.AlbumId, - principalTable: "Albums", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserAlbums", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - AlbumId = table.Column(type: "integer", nullable: false), - PlayedCount = table.Column(type: "integer", nullable: false), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - IsStarred = table.Column(type: "boolean", nullable: false), - IsHated = table.Column(type: "boolean", nullable: false), - StarredAt = table.Column(type: "timestamp with time zone", nullable: true), - Rating = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserAlbums", x => x.Id); - table.ForeignKey( - name: "FK_UserAlbums_Albums_AlbumId", - column: x => x.AlbumId, - principalTable: "Albums", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserAlbums_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Bookmarks", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: false), - Comment = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - Position = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - PlayedCount = table.Column(type: "integer", nullable: false), - ItunesId = table.Column(type: "text", nullable: true), - AmgId = table.Column(type: "text", nullable: true), - DiscogsId = table.Column(type: "text", nullable: true), - WikiDataId = table.Column(type: "text", nullable: true), - MusicBrainzId = table.Column(type: "uuid", nullable: true), - LastFmId = table.Column(type: "text", nullable: true), - SpotifyId = table.Column(type: "text", nullable: true), - CalculatedRating = table.Column(type: "numeric", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Bookmarks", x => x.Id); - table.ForeignKey( - name: "FK_Bookmarks_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Bookmarks_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Contributors", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Role = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - SubRole = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - ArtistId = table.Column(type: "integer", nullable: true), - ContributorName = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - MetaTagIdentifier = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: true), - AlbumId = table.Column(type: "integer", nullable: false), - ContributorType = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Contributors", x => x.Id); - table.ForeignKey( - name: "FK_Contributors_Albums_AlbumId", - column: x => x.AlbumId, - principalTable: "Albums", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Contributors_Artists_ArtistId", - column: x => x.ArtistId, - principalTable: "Artists", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_Contributors_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "Playlists", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - UserId = table.Column(type: "integer", nullable: false), - IsPublic = table.Column(type: "boolean", nullable: false), - SongCount = table.Column(type: "smallint", nullable: true), - Duration = table.Column(type: "double precision", nullable: false), - HasCustomImage = table.Column(type: "boolean", nullable: false), - AllowedUserIds = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - SongId = table.Column(type: "integer", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Playlists", x => x.Id); - table.ForeignKey( - name: "FK_Playlists_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_Playlists_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PlayQues", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: false), - SongApiKey = table.Column(type: "uuid", nullable: false), - IsCurrentSong = table.Column(type: "boolean", nullable: false), - ChangedBy = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Position = table.Column(type: "double precision", nullable: false), - PlayQueId = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PlayQues", x => x.Id); - table.ForeignKey( - name: "FK_PlayQues_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PlayQues_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserSongs", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: false), - PlayedCount = table.Column(type: "integer", nullable: false), - LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), - IsStarred = table.Column(type: "boolean", nullable: false), - IsHated = table.Column(type: "boolean", nullable: false), - StarredAt = table.Column(type: "timestamp with time zone", nullable: true), - Rating = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserSongs", x => x.Id); - table.ForeignKey( - name: "FK_UserSongs_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserSongs_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PlaylistSong", - columns: table => new - { - SongId = table.Column(type: "integer", nullable: false), - PlaylistId = table.Column(type: "integer", nullable: false), - SongApiKey = table.Column(type: "uuid", nullable: false), - PlaylistOrder = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PlaylistSong", x => new { x.SongId, x.PlaylistId }); - table.ForeignKey( - name: "FK_PlaylistSong_Playlists_PlaylistId", - column: x => x.PlaylistId, - principalTable: "Playlists", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PlaylistSong_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "Libraries", - columns: new[] { "Id", "AlbumCount", "ApiKey", "ArtistCount", "CreatedAt", "Description", "IsLocked", "LastScanAt", "LastUpdatedAt", "Name", "Notes", "Path", "SongCount", "SortOrder", "Tags", "Type" }, - values: new object[,] - { - { 1, null, new Guid("a7d0993b-992a-456c-bf1d-fbcd7625396c"), null, NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "Files in this directory are scanned and Album information is gathered via processing.", false, null, null, "Inbound", null, "/storage/inbound/", null, 0, null, 1 }, - { 2, null, new Guid("bf06be32-c95f-4a5c-b241-752daef0478d"), null, NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "The staging directory to place processed files into (Inbound -> Staging -> Library).", false, null, null, "Staging", null, "/storage/staging/", null, 0, null, 2 }, - { 3, null, new Guid("0bc1f88c-11ea-4750-9a34-5262473bb0ec"), null, NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "The library directory to place processed, reviewed and ready to use music files into.", false, null, null, "Storage", null, "/storage/library/", null, 0, null, 3 }, - { 4, null, new Guid("27bcb519-d9fd-4b59-97f9-82289b5be4b6"), null, NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "Library where user images are stored.", false, null, null, "User Images", null, "/storage/images/users/", null, 0, null, 4 }, - { 5, null, new Guid("00942603-9D17-444B-8F04-5CEFC191A4DA"), null, NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "Library where playlist data is stored.", false, null, null, "Playlist Data", null, "/storage/playlists/", null, 0, null, 5 } - }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1, new Guid("c19e1e36-6e24-405f-a62f-01a9ffb0a819"), null, "Add a default filter to show only albums with this or less number of songs.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "filtering.lessThanSongCount", null, null, 0, null, "3" }, - { 2, new Guid("57ea2ca9-f69e-47ef-8dd3-0d0169c06641"), null, "Add a default filter to show only albums with this or less duration.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "filtering.lessThanDuration", null, null, 0, null, "720000" }, - { 4, new Guid("51c48263-2e2c-4983-b2ef-0885ba28b825"), null, "Default page size when view including pagination.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "defaults.pagesize", null, null, 0, null, "100" }, - { 6, new Guid("ca83a05f-29c9-4496-bcf4-d423bd7b6cdc"), null, "Amount of time to display a Toast then auto-close (in milliseconds.)", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "userinterface.toastAutoCloseTime", null, null, 0, null, "2000" }, - { 9, new Guid("f4ba33f8-19b1-43a2-96e9-c85dd38fbaf3"), null, "List of ignored articles when scanning media (pipe delimited).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.ignoredArticles", null, null, 0, null, "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" }, - { 26, new Guid("05f0efbe-033b-4f15-ae14-141eace3320a"), null, "Fragments of artist names to replace (JSON Dictionary).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.artistNameReplacements", null, null, 0, null, "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" }, - { 27, new Guid("73204192-be65-4336-8308-cd85e62d6c81"), null, "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", null, null, 0, null, "false" }, - { 28, new Guid("0df52524-3a13-4ddc-8485-1cab72d53303"), null, "Delete original files when processing. When false a copy if made, else original is deleted after processed.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.doDeleteOriginal", null, null, 0, null, "false" }, - { 29, new Guid("52f8190e-6b04-4882-9963-e5d30903351f"), null, "Extension to add to file when converted, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.convertedExtension", null, null, 0, null, "_converted" }, - { 30, new Guid("c0fdf045-dcdd-4c0a-bb13-64dc55324438"), null, "Extension to add to file when processed, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.processedExtension", null, null, 0, null, "_processed" }, - { 32, new Guid("b30c6aa3-0e2f-4e9d-99b1-4b2f384e95bf"), null, "When processing over write any existing Melodee data files, otherwise skip and leave in place.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.doOverrideExistingMelodeeDataFiles", null, null, 0, null, "true" }, - { 34, new Guid("68684128-a20a-4ff4-bb95-3c7b87413079"), null, "The maximum number of files to process, set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.maximumProcessingCount", null, null, 0, null, "0" }, - { 35, new Guid("8fe93224-7b71-4fb2-b17d-e93df6d279d5"), null, "Maximum allowed length of album directory name.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.maximumAlbumDirectoryNameLength", null, null, 0, null, "255" }, - { 36, new Guid("a07c7cec-67a2-489e-b8d9-c95b7a696d61"), null, "Maximum allowed length of artist directory name.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.maximumArtistDirectoryNameLength", null, null, 0, null, "255" }, - { 37, new Guid("7d2eeefc-f8bc-4e0d-914c-0c143ba5681a"), null, "Fragments to remove from album titles (JSON array).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.albumTitleRemovals", null, null, 0, null, "['^', '~', '#']" }, - { 38, new Guid("145568f9-9f69-4b47-8462-589540e089e9"), null, "Fragments to remove from song titles (JSON array).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.songTitleRemovals", null, null, 0, null, "[';', '(Remaster)', 'Remaster']" }, - { 39, new Guid("8e41511f-5e92-4b23-b947-bc04c995afc2"), null, "Continue processing if an error is encountered.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.doContinueOnDirectoryProcessingErrors", null, null, 0, null, "true" }, - { 41, new Guid("b40fcf93-f38b-4bd1-9718-dc27e69d0b70"), null, "Is scripting enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scripting.enabled", null, null, 0, null, "false" }, - { 42, new Guid("9acbd105-a4aa-4297-b4ba-7b5b5e00aaae"), null, "Script to run before processing the inbound directory, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scripting.preDiscoveryScript", null, null, 0, null, "" }, - { 43, new Guid("58eab599-70c5-4e01-9491-374bc5f940b3"), null, "Script to run after processing the inbound directory, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scripting.postDiscoveryScript", null, null, 0, null, "" }, - { 45, new Guid("fe82fba7-a616-466c-a414-619eda2f0f73"), null, "Don't create performer contributors for these performer names.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.ignoredPerformers", null, null, 0, null, "" }, - { 46, new Guid("4b87fa8d-77d1-4825-8957-03084f959a78"), null, "Don't create production contributors for these production names.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.ignoredProduction", null, null, 0, null, "['www.t.me;pmedia_music']" }, - { 47, new Guid("05b1dd4a-c821-4022-be7d-d95f02c20196"), null, "Don't create publisher contributors for these artist names.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.ignoredPublishers", null, null, 0, null, "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" }, - { 49, new Guid("5460f9e6-425f-4aea-ac55-e98e6f55ef86"), null, "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "encryption.privateKey", null, null, 0, null, "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" }, - { 50, new Guid("1cff105e-34e2-408b-858b-e422edca3db7"), null, "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.duplicateAlbumPrefix", null, null, 0, null, "_duplicate_ " }, - { 53, new Guid("875b53cc-2302-4400-8389-eb5406b69832"), null, "Processing batching size. Allowed range is between [250] and [1000]. ", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "defaults.batchSize", null, null, 0, null, "250" }, - { 100, new Guid("4c6739bc-61c8-4c66-920b-cc135f87d7bf"), 1, "OpenSubsonic server supported Subsonic API version.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonic.serverSupportedVersion", null, null, 0, null, "1.16.1" }, - { 101, new Guid("cc495ed2-bbad-44f3-bb51-6f547b36a5f5"), 1, "OpenSubsonic server name.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonicServer.type", null, null, 0, null, "Melodee" }, - { 102, new Guid("1ece978d-9447-4058-919c-39592a74276c"), 1, "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonicServer.version", null, null, 0, null, "1.0.1 (beta)" }, - { 103, new Guid("f56ad731-8b43-40f4-84d4-a5032320dafb"), 1, "OpenSubsonic email to use in License responses.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonicServerLicenseEmail", null, null, 0, null, "noreply@localhost.lan" }, - { 104, new Guid("232447a6-f4d7-43f9-ace1-154167c7fab3"), 1, "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonicServer.index.artistLimit", null, null, 0, null, "1000" }, - { 200, new Guid("78fbec1a-7618-4c02-b25b-66584048274c"), 2, "Enable Melodee to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "conversion.enabled", null, null, 0, null, "true" }, - { 201, new Guid("3a2c2907-4e07-4322-aa97-a3514165f864"), 2, "Bitrate to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "conversion.bitrate", null, null, 0, null, "384" }, - { 202, new Guid("901a9ec0-8f52-4544-b725-e92ba2373f9c"), 2, "Vbr to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "conversion.vbrLevel", null, null, 0, null, "4" }, - { 203, new Guid("682c1e5e-04a9-4ef0-935a-7258490d1fb2"), 2, "Sampling rate to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "conversion.samplingRate", null, null, 0, null, "48000" }, - { 300, new Guid("74b2825e-3538-4d23-842e-041424df1a12"), 3, "Short Format to use when displaying full dates.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "formatting.dateTimeDisplayFormatShort", null, null, 0, null, "yyyyMMdd HH\\:mm" }, - { 301, new Guid("cba92f59-00e1-4ba9-9e7e-fbc097b5f856"), 3, "Format to use when displaying activity related dates (e.g., processing messages)", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "formatting.dateTimeDisplayActivityFormat", null, null, 0, null, "hh\\:mm\\:ss\\.ffff" }, - { 400, new Guid("95791adc-da25-44ea-9113-21ad610760aa"), 4, "Include any embedded images from media files into the Melodee data file.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.doLoadEmbeddedImages", null, null, 0, null, "true" }, - { 401, new Guid("d86c90ad-7515-4516-b46f-d0474231144c"), 4, "Small image size (square image, this is both width and height).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.smallSize", null, null, 0, null, "300" }, - { 402, new Guid("0ae4be96-bab9-4646-bce2-4e1985a8bd94"), 4, "Medium image size (square image, this is both width and height).", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.mediumSize", null, null, 0, null, "600" }, - { 403, new Guid("ff1f0dc9-8194-4d14-906b-a4354cddb7d6"), 4, "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.largeSize", null, null, 0, null, "1600" }, - { 404, new Guid("a2b77237-941a-43fb-9692-7a6973c0f598"), 4, "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.maximumNumberOfAlbumImages", null, null, 0, null, "25" }, - { 405, new Guid("51de0ffb-e287-4b57-8a05-f45575ec5353"), 4, "Maximum allowed number of images for an artist, set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.maximumNumberOfArtistImages", null, null, 0, null, "25" }, - { 406, new Guid("f2a68d3e-dd6c-4563-9769-09959634c599"), 4, "Images under this size are considered invalid, set to zero to disable.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "imaging.minimumImageSize", null, null, 0, null, "300" }, - { 500, new Guid("8ab4a64c-0d02-440f-94a2-ec5fdaad35b9"), 5, "Is Magic processing enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.enabled", null, null, 0, null, "true" }, - { 501, new Guid("e308f17a-9bbe-4f8d-8dcd-b3f558579c3c"), 5, "Renumber songs when doing magic processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doRenumberSongs", null, null, 0, null, "true" }, - { 502, new Guid("fd577639-7f89-413c-9c0f-70526a9d4c20"), 5, "Remove featured artists from song artist when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doRemoveFeaturingArtistFromSongArtist", null, null, 0, null, "true" }, - { 503, new Guid("9c96bfb9-f23d-4156-93c1-c4365187e883"), 5, "Remove featured artists from song title when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doRemoveFeaturingArtistFromSongTitle", null, null, 0, null, "true" }, - { 504, new Guid("add0ef4c-7a53-4807-afd6-1127f3f517fa"), 5, "Replace song artist separators with standard ID3 separator ('/') when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doReplaceSongsArtistSeparators", null, null, 0, null, "true" }, - { 505, new Guid("54374002-9e27-4d2d-ba98-95e7c0872f95"), 5, "Set the song year to current year if invalid or missing when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doSetYearToCurrentIfInvalid", null, null, 0, null, "false" }, - { 506, new Guid("13c8563c-2b39-4366-b53d-75d3d4cc5523"), 5, "Remove unwanted text from album title when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doRemoveUnwantedTextFromAlbumTitle", null, null, 0, null, "true" }, - { 507, new Guid("4371ab77-1572-4c33-8bdb-a4906ad3de8e"), 5, "Remove unwanted text from song titles when doing magic.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "magic.doRemoveUnwantedTextFromSongTitles", null, null, 0, null, "true" }, - { 700, new Guid("0fcb90aa-8766-497c-91ae-132caba18bbc"), 7, "Process of CueSheet files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "plugin.cueSheet.enabled", null, null, 0, null, "true" }, - { 701, new Guid("0d6683f6-d308-4639-a4bb-d5ff56edcae6"), 7, "Process of M3U files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "plugin.m3u.enabled", null, null, 0, null, "true" }, - { 702, new Guid("8b62c0c2-fef3-42db-9a5b-30f825a6cd9f"), 7, "Process of NFO files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "plugin.nfo.enabled", null, null, 0, null, "true" }, - { 703, new Guid("242613aa-3fc0-47e9-9d50-356603ad21c1"), 7, "Process of Simple File Verification (SFV) files during processing.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "plugin.simpleFileVerification.enabled", null, null, 0, null, "true" }, - { 704, new Guid("5de830d8-b292-45c6-9bf1-d235de3fdda3"), 7, "If true then all comments will be removed from media files.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "processing.doDeleteComments", null, null, 0, null, "true" }, - { 902, new Guid("9c38eb9d-6847-403b-bb55-c23ab235ed2a"), 9, "User agent to send with Search engine requests.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.userAgent", null, null, 0, null, "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" }, - { 903, new Guid("0a30b39f-9fe3-492f-a980-c8dc313e707c"), 9, "Default page size when performing a search engine search.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.defaultPageSize", null, null, 0, null, "20" }, - { 904, new Guid("9e8a1765-2be0-46df-93da-ea772c299a3c"), 9, "Is MusicBrainz search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.musicbrainz.enabled", null, null, 0, null, "true" }, - { 905, new Guid("4ebad197-6fc2-454c-92f7-50c16bf2c84d"), 9, "Storage path to hold MusicBrainz downloaded files and SQLite db.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.musicbrainz.storagePath", null, null, 0, null, "/melodee_test/search-engine-storage/musicbrainz/" }, - { 906, new Guid("b3acd683-1e94-4f75-aefd-59fe23e633ac"), 9, "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.musicbrainz.importMaximumToProcess", null, null, 0, null, "0" }, - { 907, new Guid("4623b714-d3ea-4611-a0fb-842cdbfb287b"), 9, "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.musicbrainz.importBatchSize", null, null, 0, null, "50000" }, - { 908, new Guid("c92d47dd-6f4f-4be4-aba8-1174ec6efedb"), 9, "Timestamp of when last MusicBrainz import was successful.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.musicbrainz.importLastImportTimestamp", null, null, 0, null, "" }, - { 910, new Guid("6e699c20-51c4-4c06-8fe9-11aa750a6588"), 9, "Is Spotify search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.spotify.enabled", null, null, 0, null, "false" }, - { 911, new Guid("be3fa34e-cf40-4ec7-b25d-3ae658d1a3c8"), 9, "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.spotify.apiKey", null, null, 0, null, "" }, - { 912, new Guid("185eb3f8-62c6-4ec0-ad0c-7797839e6dba"), 9, "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.spotify.sharedSecret", null, null, 0, null, "" }, - { 913, new Guid("018e7cf8-6db0-445b-b766-978ca43673da"), 9, "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.spotify.accessToken", null, null, 0, null, "" }, - { 914, new Guid("7ef3799b-24cf-4e29-aba8-b43cb51835ec"), 9, "Is ITunes search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.itunes.enabled", null, null, 0, null, "true" }, - { 915, new Guid("c479de34-818d-4564-9f89-9560bd8ffcb4"), 9, "Is LastFM search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.lastFm.Enabled", null, null, 0, null, "true" }, - { 916, new Guid("8054da9c-5bd0-43a4-8cef-2fae86f30bfd"), 9, "When performing a search engine search, the maximum allowed page size.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.maximumAllowedPageSize", null, null, 0, null, "1000" }, - { 917, new Guid("60e38c97-4bb8-4867-bfff-40be4c8b96c4"), 9, "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "searchEngine.artistSearchDatabaseRefreshInDays", null, null, 0, null, "14" }, - { 1000, new Guid("8f59432d-f5a5-44f5-a937-e5ef37b0192a"), 10, "Is scrobbling enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scrobbling.enabled", null, null, 0, null, "false" }, - { 1001, new Guid("eb1c90fa-a548-4d8e-a013-11dac51a02cb"), 10, "Is scrobbling to Last.fm enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scrobbling.lastFm.Enabled", null, null, 0, null, "false" }, - { 1002, new Guid("f0c04a47-7ee9-4669-b629-47e04dcc04a1"), 10, "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scrobbling.lastFm.apiKey", null, null, 0, null, "" }, - { 1003, new Guid("153003c8-8f6e-47fc-975e-5337dbf3899a"), 10, "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "scrobbling.lastFm.sharedSecret", null, null, 0, null, "" }, - { 1100, new Guid("77d09e6b-685d-4f5b-ab6b-d5cb2739caf6"), 11, "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "system.baseUrl", null, null, 0, null, "** REQUIRED: THIS MUST BE EDITED **" }, - { 1101, new Guid("22425a3a-85be-4524-a30e-813f6c34d9c3"), 11, "Is downloading enabled.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "system.isDownloadingEnabled", null, null, 0, null, "true" }, - { 1200, new Guid("8128acee-90e9-458a-8178-ab1b68fcf331"), 12, "Default format for transcoding.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "transcoding.default", null, null, 0, null, "raw" }, - { 1201, new Guid("d55149f3-0b78-4bdc-b403-8faa86832a46"), 12, "Default command to transcode MP3 for streaming.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "transcoding.command.mp3", null, null, 0, null, "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" }, - { 1202, new Guid("3e4cd1a5-7c52-4fc7-87c9-c29f62d0a17b"), 12, "Default command to transcode using libopus for streaming.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "transcoding.command.opus", null, null, 0, null, "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" }, - { 1203, new Guid("7e468a9e-f700-4d5b-91fb-663cab09b275"), 12, "Default command to transcode to aac for streaming.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "transcoding.command.aac", null, null, 0, null, "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" }, - { 1300, new Guid("bd97ecea-f5ff-42d7-8179-14a76af44541"), 13, "The maximum value a song number can have for an album.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "validation.maximumSongNumber", null, null, 0, null, "9999" }, - { 1301, new Guid("204605c7-d29d-4e5c-98fb-2b4f0a9c4a67"), 13, "Minimum allowed year for an album.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "validation.minimumAlbumYear", null, null, 0, null, "1860" }, - { 1302, new Guid("207d0318-0349-4428-99b9-c8f7ac25ea28"), 13, "Maximum allowed year for an album.", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "validation.maximumAlbumYear", null, null, 0, null, "2150" }, - { 1400, new Guid("03ad6c13-132b-43c5-b8f5-6e3b4fa9aa9a"), 14, "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "jobs.artistHousekeeping.cronExpression", null, null, 0, null, "0 0 0/1 1/1 * ? *" }, - { 1401, new Guid("68647ce0-97ac-4e67-81b7-68da8dd41fd1"), 14, "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "jobs.libraryProcess.cronExpression", null, null, 0, null, "0 */10 * ? * *" }, - { 1402, new Guid("7dd4d448-802d-4b14-82c1-e75c893c0ec2"), 14, "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "jobs.libraryInsert.cronExpression", null, null, 0, null, "0 0 0 * * ?" }, - { 1403, new Guid("a1cbc9d8-e407-4dc5-84ad-f86812434182"), 14, "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "jobs.musicbrainzUpdateDatabase.cronExpression", null, null, 0, null, "0 0 12 1 * ?" }, - { 1404, new Guid("71dc2fcd-00e6-4094-8112-4610d47a309b"), 14, "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "jobs.artistSearchEngineHousekeeping.cronExpression", null, null, 0, null, "0 0 0 * * ?" } - }); - - migrationBuilder.CreateIndex( - name: "IX_Albums_ApiKey", - table: "Albums", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Albums_ArtistId_Name", - table: "Albums", - columns: new[] { "ArtistId", "Name" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Albums_ArtistId_NameNormalized", - table: "Albums", - columns: new[] { "ArtistId", "NameNormalized" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Albums_ArtistId_SortName", - table: "Albums", - columns: new[] { "ArtistId", "SortName" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Albums_MusicBrainzId", - table: "Albums", - column: "MusicBrainzId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_ArtistRelation_ApiKey", - table: "ArtistRelation", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_ArtistRelation_ArtistId_RelatedArtistId", - table: "ArtistRelation", - columns: new[] { "ArtistId", "RelatedArtistId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_ArtistRelation_RelatedArtistId", - table: "ArtistRelation", - column: "RelatedArtistId"); - - migrationBuilder.CreateIndex( - name: "IX_Artists_ApiKey", - table: "Artists", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Artists_LibraryId", - table: "Artists", - column: "LibraryId"); - - migrationBuilder.CreateIndex( - name: "IX_Artists_MusicBrainzId", - table: "Artists", - column: "MusicBrainzId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Artists_Name", - table: "Artists", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Artists_NameNormalized", - table: "Artists", - column: "NameNormalized"); - - migrationBuilder.CreateIndex( - name: "IX_Artists_SortName", - table: "Artists", - column: "SortName"); - - migrationBuilder.CreateIndex( - name: "IX_Bookmarks_ApiKey", - table: "Bookmarks", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Bookmarks_MusicBrainzId", - table: "Bookmarks", - column: "MusicBrainzId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Bookmarks_SongId", - table: "Bookmarks", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_Bookmarks_UserId_SongId", - table: "Bookmarks", - columns: new[] { "UserId", "SongId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_AlbumId", - table: "Contributors", - column: "AlbumId"); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ApiKey", - table: "Contributors", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ArtistId_MetaTagIdentifier_AlbumId", - table: "Contributors", - columns: new[] { "ArtistId", "MetaTagIdentifier", "AlbumId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ContributorName_MetaTagIdentifier_AlbumId", - table: "Contributors", - columns: new[] { "ContributorName", "MetaTagIdentifier", "AlbumId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_SongId", - table: "Contributors", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_Libraries_ApiKey", - table: "Libraries", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Libraries_Type", - table: "Libraries", - column: "Type", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_LibraryScanHistories_LibraryId", - table: "LibraryScanHistories", - column: "LibraryId"); - - migrationBuilder.CreateIndex( - name: "IX_Players_ApiKey", - table: "Players", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Players_UserId_Client_UserAgent", - table: "Players", - columns: new[] { "UserId", "Client", "UserAgent" }); - - migrationBuilder.CreateIndex( - name: "IX_Playlists_ApiKey", - table: "Playlists", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Playlists_SongId", - table: "Playlists", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_Playlists_UserId_Name", - table: "Playlists", - columns: new[] { "UserId", "Name" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistSong_PlaylistId", - table: "PlaylistSong", - column: "PlaylistId"); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistSong_SongId_PlaylistId", - table: "PlaylistSong", - columns: new[] { "SongId", "PlaylistId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PlayQues_ApiKey", - table: "PlayQues", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PlayQues_SongId", - table: "PlayQues", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_PlayQues_UserId", - table: "PlayQues", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_RadioStations_ApiKey", - table: "RadioStations", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Settings_ApiKey", - table: "Settings", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Settings_Category", - table: "Settings", - column: "Category"); - - migrationBuilder.CreateIndex( - name: "IX_Settings_Key", - table: "Settings", - column: "Key", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Shares_ApiKey", - table: "Shares", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Shares_UserId", - table: "Shares", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_Songs_AlbumId_SongNumber", - table: "Songs", - columns: new[] { "AlbumId", "SongNumber" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Songs_ApiKey", - table: "Songs", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Songs_MusicBrainzId", - table: "Songs", - column: "MusicBrainzId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Songs_Title", - table: "Songs", - column: "Title"); - - migrationBuilder.CreateIndex( - name: "IX_UserAlbums_AlbumId", - table: "UserAlbums", - column: "AlbumId"); - - migrationBuilder.CreateIndex( - name: "IX_UserAlbums_ApiKey", - table: "UserAlbums", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserAlbums_UserId_AlbumId", - table: "UserAlbums", - columns: new[] { "UserId", "AlbumId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserArtists_ApiKey", - table: "UserArtists", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserArtists_ArtistId", - table: "UserArtists", - column: "ArtistId"); - - migrationBuilder.CreateIndex( - name: "IX_UserArtists_UserId_ArtistId", - table: "UserArtists", - columns: new[] { "UserId", "ArtistId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Users_ApiKey", - table: "Users", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Users_Email", - table: "Users", - column: "Email", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Users_UserName", - table: "Users", - column: "UserName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserSongs_ApiKey", - table: "UserSongs", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserSongs_SongId", - table: "UserSongs", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_UserSongs_UserId_SongId", - table: "UserSongs", - columns: new[] { "UserId", "SongId" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ArtistRelation"); - - migrationBuilder.DropTable( - name: "Bookmarks"); - - migrationBuilder.DropTable( - name: "Contributors"); - - migrationBuilder.DropTable( - name: "LibraryScanHistories"); - - migrationBuilder.DropTable( - name: "Players"); - - migrationBuilder.DropTable( - name: "PlaylistSong"); - - migrationBuilder.DropTable( - name: "PlayQues"); - - migrationBuilder.DropTable( - name: "RadioStations"); - - migrationBuilder.DropTable( - name: "SearchHistories"); - - migrationBuilder.DropTable( - name: "Settings"); - - migrationBuilder.DropTable( - name: "Shares"); - - migrationBuilder.DropTable( - name: "UserAlbums"); - - migrationBuilder.DropTable( - name: "UserArtists"); - - migrationBuilder.DropTable( - name: "UserSongs"); - - migrationBuilder.DropTable( - name: "Playlists"); - - migrationBuilder.DropTable( - name: "Songs"); - - migrationBuilder.DropTable( - name: "Users"); - - migrationBuilder.DropTable( - name: "Albums"); - - migrationBuilder.DropTable( - name: "Artists"); - - migrationBuilder.DropTable( - name: "Libraries"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250218234446_AddUserPins.Designer.cs b/src/Melodee.Common/Migrations/20250218234446_AddUserPins.Designer.cs deleted file mode 100644 index 5fcfc4205..000000000 --- a/src/Melodee.Common/Migrations/20250218234446_AddUserPins.Designer.cs +++ /dev/null @@ -1,3159 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250218234446_AddUserPins")] - partial class AddUserPins - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("7aff1073-c154-439e-b455-38223cc3026a"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("a99098ff-16c3-4f60-9995-319276b884b3"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f1899e5d-4841-4473-bba8-2d106f900844"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("e5bcc65a-fc86-4148-be27-c3574f54a3ba"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("HasCustomImage") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("72b0ee97-e9e5-4d3a-97f9-1d81f28fda21"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("467a45c4-6a1c-44d9-a01b-182bf2e347e6"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("2a15d055-4785-4a4a-b6d1-0194dbed648a"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("d6eb22af-cbed-462d-8b84-fc0aa2b39174"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("0a31a082-80a4-4147-a004-128a3cfd2035"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("9ecee524-197d-40ec-9fe4-b54e81d2b6e1"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("a7ee3ab3-3c8a-4d28-a8b6-32eff4e5f473"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("1a08d66d-e12e-4a9f-a126-56d3d7db525f"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("3486e39c-516c-4c4d-8e1b-26be8cf05e88"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("d07c521d-531d-4236-9104-f7bfdf83f151"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("e40082c3-8833-4904-af55-754a434bdb44"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("f187765d-d8a2-4923-9d17-3e6795f0e1df"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("9d519ccc-1a11-4ff6-a39a-859b0b0275f4"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("a1ce8e83-5e28-465a-98a6-418769bf24de"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("1eef470b-66d4-4477-a467-e76ff71e523c"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("1c14ec9d-3128-4eb8-b419-81b19f99d30c"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("9365d7d2-bdad-47d1-9aa0-d801ea5a1a21"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("bcbb34af-a006-4676-b584-978d9405c6fc"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("ada1fbdb-9fff-4ef5-bc27-c10852f464c2"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("b33c0544-6e44-4a74-a163-1737c48468b1"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("78735548-4f98-44aa-9199-a14759a6b032"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("fd943297-487e-4d2e-8505-d4616889fa45"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("c07b3937-3bb9-460a-9f1a-2869a4ccabbf"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("3642cbe0-baff-4c94-9cc5-ce9fcef4b3d5"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("779f690b-dc38-4f81-9b17-bd36d0b839b3"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("d1f60181-4f6b-4345-989b-b7bd756abd4b"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("3a7ae9da-5505-44b5-8602-787b3ae4ab56"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("05557a7c-09bf-4e59-b0ca-58fe8beb891f"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("41a3db9e-77db-4a55-8f90-696e62588079"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1006cf83-ea2f-4802-86bc-fed58ae34e8c"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("f81a8abf-8264-4dff-90ed-28bc52274e53"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("ade153a5-8276-4c34-8fce-90f3404d49b8"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("3ed83632-f594-4229-935e-9317a66d490d"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("cc8048ac-584e-4cb6-b201-dd15fbf84f61"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("75582ad4-de4d-421b-a54c-1fc813a480e2"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("0558f66e-2bb6-4cc6-b818-aed55863b341"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("323071de-fa92-48fc-8ce1-b7a36ff7dcdd"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("69fff3eb-ed7a-4d0d-aac7-92f14813a1bc"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("c6aa835c-9600-471a-bca9-d35ab4654580"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("16d3058f-3457-4c0b-bdaa-36a94b162c81"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("b8a76cda-6de2-4b1d-b96e-e65d9664f1ff"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("b355c21b-5a73-4eaa-9e5c-878615de6a7e"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("ff095304-1987-4896-9705-681dc56aa3f8"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("852745ea-f982-4f22-9fed-4bd91b403eb5"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("ba1eea2c-31ac-4a58-b0a3-c95d5526e5d4"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("cf705a22-23c8-461b-bce9-66a1477bf6e6"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("95423e34-3328-47ff-b02e-65f06b19143c"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 100, - ApiKey = new Guid("7ef46246-ba4a-4744-b3e7-68c4ed881369"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("1c23573b-4f2f-432d-97d7-f21e973113bc"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("cdbc87c1-0746-4f89-a0c4-220a9060eb63"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("87a2fb29-ed0c-45db-bea0-016cd538163e"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("591391f8-df5f-4d7e-afc1-78ef3d042ff4"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("d0f46850-f78e-4135-b27b-ec28de279df3"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("2c4ce3f2-0ea6-4a35-a3be-ca35a92b30ce"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("af2d169b-277b-40a6-bb01-d08bef772b80"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("eef3c9e7-3583-4bfd-8142-73d05ad708b1"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("6257ac75-d2ac-449b-81f9-93650c896e1a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("d3aa1106-6fab-4257-8757-dc06f0dcec12"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("ec9a5917-3a69-449b-b48e-f79bcd49a543"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("a1ac53e6-82ed-4d13-93ad-08346c2abc7d"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("7f8079a1-8c26-4972-98e0-8fea3381a25f"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("b155c227-a19d-4946-9f6d-653179054dc0"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("f6638107-5e1f-458d-ac0a-de8b72476b18"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("4ca4a474-555e-424d-bbab-c0e363e48594"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("44d65b04-21e8-4b38-bab0-c8b8f8da002e"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("54a5b128-1d50-498a-ba7c-90155dd6c7d5"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("85ad093e-3271-4c15-9fea-645b05e57cce"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("5a77e9ee-f0eb-4638-b447-d909444069ed"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("5bbed4c2-0b52-4d66-b4e3-60b5fef725dd"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("d51d1a2e-18f0-4ef3-8e73-25e3df82ae8f"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("ed14b834-9451-41cc-8470-d6ebd8135430"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("d28ba788-1867-4d56-96d2-4b874e4b5dc8"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("69a112eb-a808-44fa-a0f5-e1d0dbb1ee00"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("e70e08ec-65ee-4648-928b-85e1c511dd7b"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("e3cfa1a7-5c27-446f-9629-a59fa19ec612"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("0b9aac8e-c8eb-4538-b8c7-f71696549e9a"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("f4e7d3c5-0286-43b7-8d2b-24d99c26d4fe"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("d546e972-6c73-4505-9d1d-1b406284a494"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("a136947b-e56a-48e7-9dae-2205d012e2e6"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("472790cd-56b7-45d1-857a-75899c01933b"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("00e8e01f-172d-44a5-afca-d9f664024559"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("8c9fce95-f0d5-4da8-8740-630cbd48f358"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("68b4955f-f329-43ae-b7ed-b8fa039e02e6"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("b0dc0822-fd51-4681-8fc6-40c89d129c0a"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("5a7a5aaa-4abc-42b4-b093-8885e0ec3ce5"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("83f95d77-20f8-43ae-b9b6-63afb96110bf"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("99bb35cc-7d3e-452a-ae39-07093ad6281a"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("3e491652-8d9d-4a86-a747-1e40efba3eb4"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("ed683b72-a18e-4029-8d70-73055cd8b0dd"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("e6c8d5a9-f975-407f-8095-a339e3f8cbce"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPin"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250218234446_AddUserPins.cs b/src/Melodee.Common/Migrations/20250218234446_AddUserPins.cs deleted file mode 100644 index 4bcd08e7a..000000000 --- a/src/Melodee.Common/Migrations/20250218234446_AddUserPins.cs +++ /dev/null @@ -1,1380 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserPins : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "UserPin", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - PinId = table.Column(type: "integer", nullable: false), - PinType = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserPin", x => x.Id); - table.ForeignKey( - name: "FK_UserPin_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7aff1073-c154-439e-b455-38223cc3026a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a99098ff-16c3-4f60-9995-319276b884b3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f1899e5d-4841-4473-bba8-2d106f900844"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5bcc65a-fc86-4148-be27-c3574f54a3ba"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("72b0ee97-e9e5-4d3a-97f9-1d81f28fda21"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("467a45c4-6a1c-44d9-a01b-182bf2e347e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a15d055-4785-4a4a-b6d1-0194dbed648a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d6eb22af-cbed-462d-8b84-fc0aa2b39174"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7ee3ab3-3c8a-4d28-a8b6-32eff4e5f473"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("779f690b-dc38-4f81-9b17-bd36d0b839b3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d1f60181-4f6b-4345-989b-b7bd756abd4b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a7ae9da-5505-44b5-8602-787b3ae4ab56"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05557a7c-09bf-4e59-b0ca-58fe8beb891f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("41a3db9e-77db-4a55-8f90-696e62588079"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1006cf83-ea2f-4802-86bc-fed58ae34e8c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f81a8abf-8264-4dff-90ed-28bc52274e53"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ade153a5-8276-4c34-8fce-90f3404d49b8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ed83632-f594-4229-935e-9317a66d490d"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc8048ac-584e-4cb6-b201-dd15fbf84f61"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75582ad4-de4d-421b-a54c-1fc813a480e2"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0558f66e-2bb6-4cc6-b818-aed55863b341"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("323071de-fa92-48fc-8ce1-b7a36ff7dcdd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69fff3eb-ed7a-4d0d-aac7-92f14813a1bc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6aa835c-9600-471a-bca9-d35ab4654580"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("16d3058f-3457-4c0b-bdaa-36a94b162c81"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b8a76cda-6de2-4b1d-b96e-e65d9664f1ff"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b355c21b-5a73-4eaa-9e5c-878615de6a7e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff095304-1987-4896-9705-681dc56aa3f8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("852745ea-f982-4f22-9fed-4bd91b403eb5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d0f46850-f78e-4135-b27b-ec28de279df3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ef46246-ba4a-4744-b3e7-68c4ed881369"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c23573b-4f2f-432d-97d7-f21e973113bc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cdbc87c1-0746-4f89-a0c4-220a9060eb63"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("87a2fb29-ed0c-45db-bea0-016cd538163e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("591391f8-df5f-4d7e-afc1-78ef3d042ff4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c14ec9d-3128-4eb8-b419-81b19f99d30c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9365d7d2-bdad-47d1-9aa0-d801ea5a1a21"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcbb34af-a006-4676-b584-978d9405c6fc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ada1fbdb-9fff-4ef5-bc27-c10852f464c2"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a31a082-80a4-4147-a004-128a3cfd2035"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ecee524-197d-40ec-9fe4-b54e81d2b6e1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5bbed4c2-0b52-4d66-b4e3-60b5fef725dd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d51d1a2e-18f0-4ef3-8e73-25e3df82ae8f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed14b834-9451-41cc-8470-d6ebd8135430"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d28ba788-1867-4d56-96d2-4b874e4b5dc8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69a112eb-a808-44fa-a0f5-e1d0dbb1ee00"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e70e08ec-65ee-4648-928b-85e1c511dd7b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e3cfa1a7-5c27-446f-9629-a59fa19ec612"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a08d66d-e12e-4a9f-a126-56d3d7db525f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3486e39c-516c-4c4d-8e1b-26be8cf05e88"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d07c521d-531d-4236-9104-f7bfdf83f151"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e40082c3-8833-4904-af55-754a434bdb44"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f187765d-d8a2-4923-9d17-3e6795f0e1df"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d519ccc-1a11-4ff6-a39a-859b0b0275f4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1ce8e83-5e28-465a-98a6-418769bf24de"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1eef470b-66d4-4477-a467-e76ff71e523c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b33c0544-6e44-4a74-a163-1737c48468b1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78735548-4f98-44aa-9199-a14759a6b032"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd943297-487e-4d2e-8505-d4616889fa45"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c07b3937-3bb9-460a-9f1a-2869a4ccabbf"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3642cbe0-baff-4c94-9cc5-ce9fcef4b3d5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2c4ce3f2-0ea6-4a35-a3be-ca35a92b30ce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af2d169b-277b-40a6-bb01-d08bef772b80"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eef3c9e7-3583-4bfd-8142-73d05ad708b1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6257ac75-d2ac-449b-81f9-93650c896e1a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3aa1106-6fab-4257-8757-dc06f0dcec12"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec9a5917-3a69-449b-b48e-f79bcd49a543"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1ac53e6-82ed-4d13-93ad-08346c2abc7d"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7f8079a1-8c26-4972-98e0-8fea3381a25f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b155c227-a19d-4946-9f6d-653179054dc0"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f6638107-5e1f-458d-ac0a-de8b72476b18"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ca4a474-555e-424d-bbab-c0e363e48594"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("44d65b04-21e8-4b38-bab0-c8b8f8da002e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54a5b128-1d50-498a-ba7c-90155dd6c7d5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85ad093e-3271-4c15-9fea-645b05e57cce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a77e9ee-f0eb-4638-b447-d909444069ed"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt", "Value" }, - values: new object[] { new Guid("472790cd-56b7-45d1-857a-75899c01933b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L), "true" }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00e8e01f-172d-44a5-afca-d9f664024559"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c9fce95-f0d5-4da8-8740-630cbd48f358"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b4955f-f329-43ae-b7ed-b8fa039e02e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b0dc0822-fd51-4681-8fc6-40c89d129c0a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a7a5aaa-4abc-42b4-b093-8885e0ec3ce5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b9aac8e-c8eb-4538-b8c7-f71696549e9a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4e7d3c5-0286-43b7-8d2b-24d99c26d4fe"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d546e972-6c73-4505-9d1d-1b406284a494"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a136947b-e56a-48e7-9dae-2205d012e2e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba1eea2c-31ac-4a58-b0a3-c95d5526e5d4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf705a22-23c8-461b-bce9-66a1477bf6e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95423e34-3328-47ff-b02e-65f06b19143c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("83f95d77-20f8-43ae-b9b6-63afb96110bf"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("99bb35cc-7d3e-452a-ae39-07093ad6281a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e491652-8d9d-4a86-a747-1e40efba3eb4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed683b72-a18e-4029-8d70-73055cd8b0dd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e6c8d5a9-f975-407f-8095-a339e3f8cbce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.CreateIndex( - name: "IX_UserPin_ApiKey", - table: "UserPin", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserPin_UserId_PinId_PinType", - table: "UserPin", - columns: new[] { "UserId", "PinId", "PinType" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "UserPin"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7d0993b-992a-456c-bf1d-fbcd7625396c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf06be32-c95f-4a5c-b241-752daef0478d"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0bc1f88c-11ea-4750-9a34-5262473bb0ec"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("27bcb519-d9fd-4b59-97f9-82289b5be4b6"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c19e1e36-6e24-405f-a62f-01a9ffb0a819"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("57ea2ca9-f69e-47ef-8dd3-0d0169c06641"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51c48263-2e2c-4983-b2ef-0885ba28b825"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca83a05f-29c9-4496-bcf4-d423bd7b6cdc"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4ba33f8-19b1-43a2-96e9-c85dd38fbaf3"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05f0efbe-033b-4f15-ae14-141eace3320a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("73204192-be65-4336-8308-cd85e62d6c81"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0df52524-3a13-4ddc-8485-1cab72d53303"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("52f8190e-6b04-4882-9963-e5d30903351f"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0fdf045-dcdd-4c0a-bb13-64dc55324438"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b30c6aa3-0e2f-4e9d-99b1-4b2f384e95bf"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68684128-a20a-4ff4-bb95-3c7b87413079"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8fe93224-7b71-4fb2-b17d-e93df6d279d5"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a07c7cec-67a2-489e-b8d9-c95b7a696d61"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d2eeefc-f8bc-4e0d-914c-0c143ba5681a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("145568f9-9f69-4b47-8462-589540e089e9"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e41511f-5e92-4b23-b947-bc04c995afc2"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b40fcf93-f38b-4bd1-9718-dc27e69d0b70"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9acbd105-a4aa-4297-b4ba-7b5b5e00aaae"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("58eab599-70c5-4e01-9491-374bc5f940b3"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe82fba7-a616-466c-a414-619eda2f0f73"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4b87fa8d-77d1-4825-8957-03084f959a78"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05b1dd4a-c821-4022-be7d-d95f02c20196"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5460f9e6-425f-4aea-ac55-e98e6f55ef86"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1cff105e-34e2-408b-858b-e422edca3db7"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("875b53cc-2302-4400-8389-eb5406b69832"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4c6739bc-61c8-4c66-920b-cc135f87d7bf"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc495ed2-bbad-44f3-bb51-6f547b36a5f5"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ece978d-9447-4058-919c-39592a74276c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f56ad731-8b43-40f4-84d4-a5032320dafb"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("232447a6-f4d7-43f9-ace1-154167c7fab3"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78fbec1a-7618-4c02-b25b-66584048274c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a2c2907-4e07-4322-aa97-a3514165f864"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("901a9ec0-8f52-4544-b725-e92ba2373f9c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("682c1e5e-04a9-4ef0-935a-7258490d1fb2"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74b2825e-3538-4d23-842e-041424df1a12"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cba92f59-00e1-4ba9-9e7e-fbc097b5f856"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95791adc-da25-44ea-9113-21ad610760aa"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d86c90ad-7515-4516-b46f-d0474231144c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ae4be96-bab9-4646-bce2-4e1985a8bd94"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff1f0dc9-8194-4d14-906b-a4354cddb7d6"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2b77237-941a-43fb-9692-7a6973c0f598"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51de0ffb-e287-4b57-8a05-f45575ec5353"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f2a68d3e-dd6c-4563-9769-09959634c599"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ab4a64c-0d02-440f-94a2-ec5fdaad35b9"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e308f17a-9bbe-4f8d-8dcd-b3f558579c3c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd577639-7f89-413c-9c0f-70526a9d4c20"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9c96bfb9-f23d-4156-93c1-c4365187e883"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("add0ef4c-7a53-4807-afd6-1127f3f517fa"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54374002-9e27-4d2d-ba98-95e7c0872f95"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13c8563c-2b39-4366-b53d-75d3d4cc5523"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4371ab77-1572-4c33-8bdb-a4906ad3de8e"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0fcb90aa-8766-497c-91ae-132caba18bbc"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d6683f6-d308-4639-a4bb-d5ff56edcae6"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8b62c0c2-fef3-42db-9a5b-30f825a6cd9f"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("242613aa-3fc0-47e9-9d50-356603ad21c1"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5de830d8-b292-45c6-9bf1-d235de3fdda3"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9c38eb9d-6847-403b-bb55-c23ab235ed2a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a30b39f-9fe3-492f-a980-c8dc313e707c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e8a1765-2be0-46df-93da-ea772c299a3c"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ebad197-6fc2-454c-92f7-50c16bf2c84d"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3acd683-1e94-4f75-aefd-59fe23e633ac"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4623b714-d3ea-4611-a0fb-842cdbfb287b"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c92d47dd-6f4f-4be4-aba8-1174ec6efedb"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6e699c20-51c4-4c06-8fe9-11aa750a6588"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be3fa34e-cf40-4ec7-b25d-3ae658d1a3c8"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("185eb3f8-62c6-4ec0-ad0c-7797839e6dba"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("018e7cf8-6db0-445b-b766-978ca43673da"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ef3799b-24cf-4e29-aba8-b43cb51835ec"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c479de34-818d-4564-9f89-9560bd8ffcb4"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8054da9c-5bd0-43a4-8cef-2fae86f30bfd"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("60e38c97-4bb8-4867-bfff-40be4c8b96c4"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt", "Value" }, - values: new object[] { new Guid("8f59432d-f5a5-44f5-a937-e5ef37b0192a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), "false" }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eb1c90fa-a548-4d8e-a013-11dac51a02cb"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0c04a47-7ee9-4669-b629-47e04dcc04a1"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("153003c8-8f6e-47fc-975e-5337dbf3899a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("77d09e6b-685d-4f5b-ab6b-d5cb2739caf6"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22425a3a-85be-4524-a30e-813f6c34d9c3"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8128acee-90e9-458a-8178-ab1b68fcf331"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d55149f3-0b78-4bdc-b403-8faa86832a46"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e4cd1a5-7c52-4fc7-87c9-c29f62d0a17b"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7e468a9e-f700-4d5b-91fb-663cab09b275"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd97ecea-f5ff-42d7-8179-14a76af44541"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("204605c7-d29d-4e5c-98fb-2b4f0a9c4a67"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("207d0318-0349-4428-99b9-c8f7ac25ea28"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03ad6c13-132b-43c5-b8f5-6e3b4fa9aa9a"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68647ce0-97ac-4e67-81b7-68da8dd41fd1"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7dd4d448-802d-4b14-82c1-e75c893c0ec2"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1cbc9d8-e407-4dc5-84ad-f86812434182"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("71dc2fcd-00e6-4094-8112-4610d47a309b"), NodaTime.Instant.FromUnixTimeTicks(17389554776280915L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.Designer.cs b/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.Designer.cs deleted file mode 100644 index e7fc942fc..000000000 --- a/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.Designer.cs +++ /dev/null @@ -1,3159 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250218234636_AddUserPins2")] - partial class AddUserPins2 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("f3c9fa06-4f44-4b36-943c-e92f82a7e5a6"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("dc63b5b1-e338-48db-86c8-e3d79e13cc4c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("1a134ea3-0050-4906-af6c-7ca9301624c5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("bca96f91-cff3-4fa6-b135-c5d537b0b816"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("HasCustomImage") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("9ee6eb83-668e-4dc1-89e9-e889280dd999"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("1dbd33f6-818a-4ac9-9700-5241587360b5"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("85d10f4e-96d0-4cb7-a76b-83c90de01860"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("77363b6d-75bc-4fd0-aba1-c4d491ca8a19"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("b3bbe87a-b24a-4932-a122-0b2bf87e234e"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("488b895c-f11b-490f-98f9-5de08f4f6cfe"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("ae607783-5e4c-4229-a05e-a61fc6991218"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("ab0aa10e-b8bf-4353-9f92-996f66230d69"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("ad8e1017-3fae-4cc8-876c-0b5532880ad3"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("b3bfdf60-e619-4190-a781-dc85996bc0c1"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("e766bf22-26c6-4d71-87d2-ee7fa7ebbe00"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("102f1079-097c-4385-a409-9095bc3e791a"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("f5286359-df34-4ca5-8fc1-e995f249fc40"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("8758687e-56fa-49a5-8327-c8744c485453"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("e128c28a-1656-4582-aa32-83fd83a895b4"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("dbc7a3cf-2866-4077-b891-3cd143008410"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("6a251b61-e9c0-47a8-b0b7-daf9dbe96e5f"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("41384e9a-2f36-4489-9e3a-4b37232d3c69"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("e5d2b0ae-7328-4499-b221-2cc6ad287f63"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("d64258f5-fab7-4ad3-9266-74cbe0370166"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("c4e8b867-87b3-44c4-84d0-f3a7f3f06d27"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("68e30223-d00b-4a33-94dc-9d1d3230c919"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("706a4254-6aee-43f7-afcb-4c9178a51ad6"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("8a562cae-64a0-48c1-b091-ea53d84040f4"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("25dcfd03-89ec-497b-87f5-9668744adde7"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("f8fe61c4-21e8-4588-ac8a-d41d51bd8cd0"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("1051707e-8d4f-4969-b1ec-80261b03ca01"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("578f6161-7f37-472c-aa5a-5c9808daf6b2"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("041af7bd-109a-4291-8f78-19588d18df86"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("134fb529-74df-4ab5-8812-2022e91c220d"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("5e42b087-9e31-4d19-9303-6002f3b5ff74"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("f70c7f17-20f0-4a5e-841c-6df39d57c39a"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("21365019-5003-4de8-94f7-fde53c13c91d"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("8c9d6ffa-4b17-4e78-be32-518659927779"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f96a0ac3-5725-4cc9-97bc-c3e6425016d7"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("8342b445-697d-4725-b6e7-2185f4a70433"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("88e9c025-5446-4f62-b20b-d2797d0eec28"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("a914b35b-17ac-4275-a604-eb8c3629858c"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("53315970-10af-4ade-abdd-30ec13e3882e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("006e0adc-c5e8-46d1-8177-a0e319c09d08"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("97981314-c045-41cc-a809-1ef14aef04ab"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("25cc740c-fd72-404e-ad61-e03e857707a3"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("fca351a7-2169-43fa-a37a-82c4a86384e8"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("7baa2261-f2c9-4e85-a8a0-710b173d0b42"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("bbd2502f-5890-40b2-baa0-864319e0ed90"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("db8f14b1-acbc-4d92-86dc-0198beacec32"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("e132afa1-2b8e-4663-adb3-8d6955729ce6"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 100, - ApiKey = new Guid("1e669421-72ba-4ffe-be54-f115572bc858"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("16332327-af9d-45df-bfa2-8d9cb97c8c75"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("179c41c4-9c9d-425d-acc5-8c48bc1f22c7"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("fd33e705-6bb0-45b0-92f2-c38283065b76"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("316d17ef-a267-4aa1-8d51-c8109e73f123"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("95c49ca0-e665-4b02-ac11-0170a352b075"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("4f588a51-c320-4e50-bcf3-b333c818117d"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("1c5f7f74-055b-4f60-8a7d-605b7ddd8855"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("a7f9fd1e-65be-4b31-8ca9-c31e260c27c9"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("f843a589-2828-4ecf-9335-3a2dbfc93706"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("01a8a68b-f7c6-4728-81f0-f9df3a2113e3"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("d9f2f8a2-040a-4a86-89a8-9dec24855d3d"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("ed813c54-0d81-4f40-98bc-81b1fa2fce4c"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("803fd583-bf83-48eb-9001-30eab400eed5"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("2d03fb99-662e-42ff-b68d-77462c7ecce6"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("b11435e0-2b77-48a4-ba59-1fe8394b3018"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("9cea4339-9603-4068-ae1d-1e5f99b157d2"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("bb05e6b4-4ee4-4641-8511-3db5fcbf58d0"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("2937a12f-ed0f-456a-ad64-c76cc097f01c"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("f43c5e86-e83f-4c05-b060-69a6eff875b5"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("089042e5-f124-4d26-b311-00337bc2ff99"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("c3c60060-1b96-44ae-9961-d99d3ab9f28d"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("fd40e915-28d2-4790-a5e6-ae0843f6c8db"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("51b3136c-11ce-443e-9855-4048a166ed23"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("53f5c0d6-57f4-4fce-9ca1-e6c8f1416c3c"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("1267d22a-526b-423c-b48e-3561134ee5bc"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("66866916-c43b-4f35-8058-e69a7ccd059e"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("627cadbb-9f5c-471a-aeba-4aa629e83b21"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("468f9217-8f28-4962-a330-6d3ac5487fb3"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("8edf16d7-9818-41e9-8624-f4106d41bffc"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("9e25b86f-8edf-46e5-b053-2cedef94645d"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("80304b88-72b7-4eae-96c3-08b48a31f6d5"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("53f515ef-7ad9-44cd-9c96-1972599ec9fd"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("2ba44339-596d-4ac1-90f3-53ee4b550fc5"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("a85f506d-291d-4962-b396-0f5aef288951"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("349ef8b2-4a4e-4f83-b56e-b77db0971e7f"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("1f1c176b-ed02-4930-8f01-2f0dd565ac5a"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("3b8f95c5-9f30-48af-b7a7-0724d7baf155"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("9a640db3-c82b-4cdf-8294-2c4c1bc493cc"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("1ea287d0-221f-4992-9fe2-ca60e288bdad"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("5d580a4d-940d-485b-b3a1-d16fb9194d37"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("5902f010-eeb2-46f7-9d6d-dc0276d7b960"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("10cd8417-3631-4e92-859f-69233bc044eb"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17399223956951321L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.cs b/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.cs deleted file mode 100644 index d9c8740fe..000000000 --- a/src/Melodee.Common/Migrations/20250218234636_AddUserPins2.cs +++ /dev/null @@ -1,1404 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserPins2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_UserPin_Users_UserId", - table: "UserPin"); - - migrationBuilder.DropPrimaryKey( - name: "PK_UserPin", - table: "UserPin"); - - migrationBuilder.RenameTable( - name: "UserPin", - newName: "UserPins"); - - migrationBuilder.RenameIndex( - name: "IX_UserPin_UserId_PinId_PinType", - table: "UserPins", - newName: "IX_UserPins_UserId_PinId_PinType"); - - migrationBuilder.RenameIndex( - name: "IX_UserPin_ApiKey", - table: "UserPins", - newName: "IX_UserPins_ApiKey"); - - migrationBuilder.AddPrimaryKey( - name: "PK_UserPins", - table: "UserPins", - column: "Id"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f3c9fa06-4f44-4b36-943c-e92f82a7e5a6"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc63b5b1-e338-48db-86c8-e3d79e13cc4c"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a134ea3-0050-4906-af6c-7ca9301624c5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bca96f91-cff3-4fa6-b135-c5d537b0b816"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ee6eb83-668e-4dc1-89e9-e889280dd999"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1dbd33f6-818a-4ac9-9700-5241587360b5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85d10f4e-96d0-4cb7-a76b-83c90de01860"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("77363b6d-75bc-4fd0-aba1-c4d491ca8a19"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae607783-5e4c-4229-a05e-a61fc6991218"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25dcfd03-89ec-497b-87f5-9668744adde7"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f8fe61c4-21e8-4588-ac8a-d41d51bd8cd0"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1051707e-8d4f-4969-b1ec-80261b03ca01"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("578f6161-7f37-472c-aa5a-5c9808daf6b2"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("041af7bd-109a-4291-8f78-19588d18df86"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("134fb529-74df-4ab5-8812-2022e91c220d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5e42b087-9e31-4d19-9303-6002f3b5ff74"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f70c7f17-20f0-4a5e-841c-6df39d57c39a"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21365019-5003-4de8-94f7-fde53c13c91d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c9d6ffa-4b17-4e78-be32-518659927779"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f96a0ac3-5725-4cc9-97bc-c3e6425016d7"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8342b445-697d-4725-b6e7-2185f4a70433"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("88e9c025-5446-4f62-b20b-d2797d0eec28"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a914b35b-17ac-4275-a604-eb8c3629858c"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53315970-10af-4ade-abdd-30ec13e3882e"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("006e0adc-c5e8-46d1-8177-a0e319c09d08"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("97981314-c045-41cc-a809-1ef14aef04ab"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25cc740c-fd72-404e-ad61-e03e857707a3"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fca351a7-2169-43fa-a37a-82c4a86384e8"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7baa2261-f2c9-4e85-a8a0-710b173d0b42"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95c49ca0-e665-4b02-ac11-0170a352b075"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e669421-72ba-4ffe-be54-f115572bc858"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("16332327-af9d-45df-bfa2-8d9cb97c8c75"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("179c41c4-9c9d-425d-acc5-8c48bc1f22c7"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd33e705-6bb0-45b0-92f2-c38283065b76"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("316d17ef-a267-4aa1-8d51-c8109e73f123"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dbc7a3cf-2866-4077-b891-3cd143008410"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a251b61-e9c0-47a8-b0b7-daf9dbe96e5f"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("41384e9a-2f36-4489-9e3a-4b37232d3c69"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5d2b0ae-7328-4499-b221-2cc6ad287f63"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3bbe87a-b24a-4932-a122-0b2bf87e234e"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("488b895c-f11b-490f-98f9-5de08f4f6cfe"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3c60060-1b96-44ae-9961-d99d3ab9f28d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd40e915-28d2-4790-a5e6-ae0843f6c8db"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51b3136c-11ce-443e-9855-4048a166ed23"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53f5c0d6-57f4-4fce-9ca1-e6c8f1416c3c"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1267d22a-526b-423c-b48e-3561134ee5bc"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66866916-c43b-4f35-8058-e69a7ccd059e"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("627cadbb-9f5c-471a-aeba-4aa629e83b21"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab0aa10e-b8bf-4353-9f92-996f66230d69"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ad8e1017-3fae-4cc8-876c-0b5532880ad3"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3bfdf60-e619-4190-a781-dc85996bc0c1"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e766bf22-26c6-4d71-87d2-ee7fa7ebbe00"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("102f1079-097c-4385-a409-9095bc3e791a"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5286359-df34-4ca5-8fc1-e995f249fc40"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8758687e-56fa-49a5-8327-c8744c485453"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e128c28a-1656-4582-aa32-83fd83a895b4"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d64258f5-fab7-4ad3-9266-74cbe0370166"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4e8b867-87b3-44c4-84d0-f3a7f3f06d27"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68e30223-d00b-4a33-94dc-9d1d3230c919"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("706a4254-6aee-43f7-afcb-4c9178a51ad6"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8a562cae-64a0-48c1-b091-ea53d84040f4"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4f588a51-c320-4e50-bcf3-b333c818117d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c5f7f74-055b-4f60-8a7d-605b7ddd8855"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7f9fd1e-65be-4b31-8ca9-c31e260c27c9"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f843a589-2828-4ecf-9335-3a2dbfc93706"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01a8a68b-f7c6-4728-81f0-f9df3a2113e3"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9f2f8a2-040a-4a86-89a8-9dec24855d3d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed813c54-0d81-4f40-98bc-81b1fa2fce4c"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("803fd583-bf83-48eb-9001-30eab400eed5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2d03fb99-662e-42ff-b68d-77462c7ecce6"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b11435e0-2b77-48a4-ba59-1fe8394b3018"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9cea4339-9603-4068-ae1d-1e5f99b157d2"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb05e6b4-4ee4-4641-8511-3db5fcbf58d0"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2937a12f-ed0f-456a-ad64-c76cc097f01c"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f43c5e86-e83f-4c05-b060-69a6eff875b5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("089042e5-f124-4d26-b311-00337bc2ff99"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53f515ef-7ad9-44cd-9c96-1972599ec9fd"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ba44339-596d-4ac1-90f3-53ee4b550fc5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a85f506d-291d-4962-b396-0f5aef288951"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("349ef8b2-4a4e-4f83-b56e-b77db0971e7f"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f1c176b-ed02-4930-8f01-2f0dd565ac5a"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b8f95c5-9f30-48af-b7a7-0724d7baf155"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("468f9217-8f28-4962-a330-6d3ac5487fb3"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8edf16d7-9818-41e9-8624-f4106d41bffc"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e25b86f-8edf-46e5-b053-2cedef94645d"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80304b88-72b7-4eae-96c3-08b48a31f6d5"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bbd2502f-5890-40b2-baa0-864319e0ed90"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("db8f14b1-acbc-4d92-86dc-0198beacec32"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e132afa1-2b8e-4663-adb3-8d6955729ce6"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9a640db3-c82b-4cdf-8294-2c4c1bc493cc"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ea287d0-221f-4992-9fe2-ca60e288bdad"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d580a4d-940d-485b-b3a1-d16fb9194d37"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5902f010-eeb2-46f7-9d6d-dc0276d7b960"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("10cd8417-3631-4e92-859f-69233bc044eb"), NodaTime.Instant.FromUnixTimeTicks(17399223956951321L) }); - - migrationBuilder.AddForeignKey( - name: "FK_UserPins_Users_UserId", - table: "UserPins", - column: "UserId", - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_UserPins_Users_UserId", - table: "UserPins"); - - migrationBuilder.DropPrimaryKey( - name: "PK_UserPins", - table: "UserPins"); - - migrationBuilder.RenameTable( - name: "UserPins", - newName: "UserPin"); - - migrationBuilder.RenameIndex( - name: "IX_UserPins_UserId_PinId_PinType", - table: "UserPin", - newName: "IX_UserPin_UserId_PinId_PinType"); - - migrationBuilder.RenameIndex( - name: "IX_UserPins_ApiKey", - table: "UserPin", - newName: "IX_UserPin_ApiKey"); - - migrationBuilder.AddPrimaryKey( - name: "PK_UserPin", - table: "UserPin", - column: "Id"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7aff1073-c154-439e-b455-38223cc3026a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a99098ff-16c3-4f60-9995-319276b884b3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f1899e5d-4841-4473-bba8-2d106f900844"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5bcc65a-fc86-4148-be27-c3574f54a3ba"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("72b0ee97-e9e5-4d3a-97f9-1d81f28fda21"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("467a45c4-6a1c-44d9-a01b-182bf2e347e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a15d055-4785-4a4a-b6d1-0194dbed648a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d6eb22af-cbed-462d-8b84-fc0aa2b39174"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7ee3ab3-3c8a-4d28-a8b6-32eff4e5f473"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("779f690b-dc38-4f81-9b17-bd36d0b839b3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d1f60181-4f6b-4345-989b-b7bd756abd4b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a7ae9da-5505-44b5-8602-787b3ae4ab56"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05557a7c-09bf-4e59-b0ca-58fe8beb891f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("41a3db9e-77db-4a55-8f90-696e62588079"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1006cf83-ea2f-4802-86bc-fed58ae34e8c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f81a8abf-8264-4dff-90ed-28bc52274e53"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ade153a5-8276-4c34-8fce-90f3404d49b8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ed83632-f594-4229-935e-9317a66d490d"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc8048ac-584e-4cb6-b201-dd15fbf84f61"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75582ad4-de4d-421b-a54c-1fc813a480e2"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0558f66e-2bb6-4cc6-b818-aed55863b341"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("323071de-fa92-48fc-8ce1-b7a36ff7dcdd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69fff3eb-ed7a-4d0d-aac7-92f14813a1bc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6aa835c-9600-471a-bca9-d35ab4654580"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("16d3058f-3457-4c0b-bdaa-36a94b162c81"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b8a76cda-6de2-4b1d-b96e-e65d9664f1ff"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b355c21b-5a73-4eaa-9e5c-878615de6a7e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff095304-1987-4896-9705-681dc56aa3f8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("852745ea-f982-4f22-9fed-4bd91b403eb5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d0f46850-f78e-4135-b27b-ec28de279df3"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ef46246-ba4a-4744-b3e7-68c4ed881369"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c23573b-4f2f-432d-97d7-f21e973113bc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cdbc87c1-0746-4f89-a0c4-220a9060eb63"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("87a2fb29-ed0c-45db-bea0-016cd538163e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("591391f8-df5f-4d7e-afc1-78ef3d042ff4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c14ec9d-3128-4eb8-b419-81b19f99d30c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9365d7d2-bdad-47d1-9aa0-d801ea5a1a21"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcbb34af-a006-4676-b584-978d9405c6fc"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ada1fbdb-9fff-4ef5-bc27-c10852f464c2"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a31a082-80a4-4147-a004-128a3cfd2035"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ecee524-197d-40ec-9fe4-b54e81d2b6e1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5bbed4c2-0b52-4d66-b4e3-60b5fef725dd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d51d1a2e-18f0-4ef3-8e73-25e3df82ae8f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed14b834-9451-41cc-8470-d6ebd8135430"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d28ba788-1867-4d56-96d2-4b874e4b5dc8"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69a112eb-a808-44fa-a0f5-e1d0dbb1ee00"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e70e08ec-65ee-4648-928b-85e1c511dd7b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e3cfa1a7-5c27-446f-9629-a59fa19ec612"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a08d66d-e12e-4a9f-a126-56d3d7db525f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3486e39c-516c-4c4d-8e1b-26be8cf05e88"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d07c521d-531d-4236-9104-f7bfdf83f151"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e40082c3-8833-4904-af55-754a434bdb44"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f187765d-d8a2-4923-9d17-3e6795f0e1df"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d519ccc-1a11-4ff6-a39a-859b0b0275f4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1ce8e83-5e28-465a-98a6-418769bf24de"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1eef470b-66d4-4477-a467-e76ff71e523c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b33c0544-6e44-4a74-a163-1737c48468b1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78735548-4f98-44aa-9199-a14759a6b032"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd943297-487e-4d2e-8505-d4616889fa45"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c07b3937-3bb9-460a-9f1a-2869a4ccabbf"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3642cbe0-baff-4c94-9cc5-ce9fcef4b3d5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2c4ce3f2-0ea6-4a35-a3be-ca35a92b30ce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af2d169b-277b-40a6-bb01-d08bef772b80"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eef3c9e7-3583-4bfd-8142-73d05ad708b1"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6257ac75-d2ac-449b-81f9-93650c896e1a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3aa1106-6fab-4257-8757-dc06f0dcec12"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec9a5917-3a69-449b-b48e-f79bcd49a543"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1ac53e6-82ed-4d13-93ad-08346c2abc7d"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7f8079a1-8c26-4972-98e0-8fea3381a25f"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b155c227-a19d-4946-9f6d-653179054dc0"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f6638107-5e1f-458d-ac0a-de8b72476b18"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ca4a474-555e-424d-bbab-c0e363e48594"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("44d65b04-21e8-4b38-bab0-c8b8f8da002e"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54a5b128-1d50-498a-ba7c-90155dd6c7d5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85ad093e-3271-4c15-9fea-645b05e57cce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a77e9ee-f0eb-4638-b447-d909444069ed"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("472790cd-56b7-45d1-857a-75899c01933b"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00e8e01f-172d-44a5-afca-d9f664024559"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c9fce95-f0d5-4da8-8740-630cbd48f358"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b4955f-f329-43ae-b7ed-b8fa039e02e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b0dc0822-fd51-4681-8fc6-40c89d129c0a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a7a5aaa-4abc-42b4-b093-8885e0ec3ce5"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b9aac8e-c8eb-4538-b8c7-f71696549e9a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4e7d3c5-0286-43b7-8d2b-24d99c26d4fe"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d546e972-6c73-4505-9d1d-1b406284a494"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a136947b-e56a-48e7-9dae-2205d012e2e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba1eea2c-31ac-4a58-b0a3-c95d5526e5d4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf705a22-23c8-461b-bce9-66a1477bf6e6"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95423e34-3328-47ff-b02e-65f06b19143c"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("83f95d77-20f8-43ae-b9b6-63afb96110bf"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("99bb35cc-7d3e-452a-ae39-07093ad6281a"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e491652-8d9d-4a86-a747-1e40efba3eb4"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed683b72-a18e-4029-8d70-73055cd8b0dd"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e6c8d5a9-f975-407f-8095-a339e3f8cbce"), NodaTime.Instant.FromUnixTimeTicks(17399222854772831L) }); - - migrationBuilder.AddForeignKey( - name: "FK_UserPin_Users_UserId", - table: "UserPin", - column: "UserId", - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.Designer.cs b/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.Designer.cs deleted file mode 100644 index d68bae0cd..000000000 --- a/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.Designer.cs +++ /dev/null @@ -1,3180 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250226120710_AddSpotifyUniqueIndex")] - partial class AddSpotifyUniqueIndex - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("03dc2fbf-ae05-4611-8663-6f98bf23a090"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("6b3dd7ca-2a29-44ff-a948-7863d2e988d0"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("a3c1680a-f24c-4c4c-bda6-88f6c7f7eb37"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("4852c3ff-344d-4df5-b6eb-0cc84b645f0a"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("637f4c10-64aa-4207-b63c-93f3d613b30f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("7da112cf-ccdf-4c7a-9e8a-55154c3bd8a4"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("11be1c54-11ce-4fa9-989b-66c5fb319aa1"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("1334f23e-7832-41f6-a937-0e9586acce24"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("af201489-0f1c-4b62-a2ba-e2c9bf84b278"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("c9e98ee1-7992-41c3-8597-25c9574db930"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("b1ea880c-6b96-4974-b42c-76d37b0ed1a2"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("74cf0f37-1004-41f7-b5c3-a1daf9dd8d04"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("72bd6be9-3bae-4e8f-a3ae-ee525b8d1a1c"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("b236d67f-903f-4727-8a21-270df583bfa8"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("e58b1c30-9d06-49cf-b935-658a7c00eae8"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("62c1ca45-f3c2-4e44-a466-7ba93ede2ab5"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("a1da5de0-19bf-4515-8812-e2dcd1e8a185"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("c03dbdc8-e236-4640-8dd8-d364c289e903"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("91162e83-ee3d-4253-8135-f0fbf58adc65"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("6fe9b5ba-0ed7-4c24-aa95-3d2bc04868c9"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("b7ede925-21d4-4741-bbe8-0d121d9077ae"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("55d65535-601b-4c66-a3e9-4aed50014104"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("b14275d9-7d01-4fd2-b7d4-9a38e0ba0b39"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("8b2f0d37-5cf6-4502-86ea-13ef595c11a4"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("837e084f-c4ee-46cf-a32e-25ba5edf24e8"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("c5f0ab5c-d047-4591-928b-d9c348af9cba"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("94d156cc-8d07-4d9c-83fe-08179bb4ef92"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("2c5d8a69-ae94-4981-9830-5af9e20b06a7"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("c3de5835-911b-4058-8cfd-d1426c0b83b0"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("89436ebc-4c8d-4710-bddf-fc7bef8a80df"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("84738b24-e82a-4caa-9907-214aafd5041d"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("1ff0cea4-5560-409d-b614-9d50e3ca7838"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("f4869674-2898-4e2d-97df-fdd38972b8f6"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("e1ec13fb-e424-4fd5-aeeb-483b47d3bcb7"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("93ceb337-77b7-44d7-a809-1cdce9dd2602"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("a730fdfa-de27-429f-9fcc-ec14ec88c964"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("bbcec87a-4d17-4f39-b420-81a16ceba347"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("f11be448-1095-4bd3-bcd5-6262589bb77c"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("1c6b1663-c41d-409b-a0fb-76d501dbddcf"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("58515e47-e18a-4abc-a17d-011762b7f15d"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("65019ef9-d673-4449-b9bf-3bd52f2c1a02"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("c3e5664e-bfbe-4dee-a8c8-8af4a3ab9f38"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("e29485a0-0901-4d97-a8b6-7698af34932c"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("71590087-df53-4fd8-b3a5-64dbecd4b602"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("e721a6b3-879f-4fd4-b847-035201cbd5eb"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("6b05d689-573e-4681-86a6-6681bd9c5e0f"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("62c7385d-08c6-481a-84f5-5f97d848c0b0"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("f903f962-c562-4a1c-b6ec-2aee6a36f7af"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("cc26cb0b-e022-48e0-8b74-b4b3747b2748"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("2125fbfd-300f-423e-b966-e3cfc7f76f11"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("efc590e1-9bc5-4115-a4d7-21e3e131ee3e"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("d76d78c4-a64f-4ea1-8473-7950efcded58"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 100, - ApiKey = new Guid("f4c2e973-eb87-4bc1-933b-ae3347bf6ba4"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("18a790ba-ab6b-4d18-a24f-e3b26a8f1504"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("ccb4adbc-b1ea-4ed7-97e7-5bb1df94a711"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("7fb531d0-c1a9-42f3-8285-10ec7022d4ca"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("cc92ffa7-e93b-46b5-9679-1648d593cc95"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("9dbb0096-5dd3-4bef-8641-697dbb313a53"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("51c69a58-9ef3-4ef9-8482-efc55862379d"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("584fe843-086b-4094-bf7b-b6f53c5d0cfa"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("53f7f9b7-1d17-4a4d-8175-fd32291e7153"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("b46b8e22-9934-4cf7-a506-457c6d41008f"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("5b1e4c51-8cf0-4af4-8d03-22a9eff5f09d"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("22650ad9-3283-4497-a3ca-0674de40c2fd"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("b57dbd79-a1ea-4d2e-a6ca-ce5a611f60a4"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("ca595da3-fea6-437c-a4c0-30d793010f14"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("2fa66a14-96b1-476c-a4ae-348c9f48ee33"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("699542de-51a1-45bf-8551-65a5223f9e29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("fea15dc3-eaca-44a8-80a6-c2d8d3588de1"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("64fb3072-e202-43e3-9420-e78a9931a211"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("aba9106c-f67d-4b93-adbb-cd307bc2d47b"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("1ecb5704-ef1f-467c-bc40-3d662464f260"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("85dd6de9-74fc-4145-964d-7217a4cd4100"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("4afc6747-327a-43dd-9283-8edb3910e9a9"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("40185ca3-8d31-4332-bb04-19e1c5ab5c45"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("bc4c5df2-1866-4bcd-9c70-5448d1edb0e6"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("8e86d6d5-a166-4b07-85a5-4d64d73bc5a8"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("7e97fbe4-37c6-423f-bafe-ae26c94c3c78"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("cb83f80c-5311-4c30-96fa-5fae64f7c9b9"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("83124393-b11e-42aa-aff3-fbb3b44388ec"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("f2472c26-5e61-45e2-8ee7-e90a12715603"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("3a35bd21-76d8-498d-909c-28b902b9a2d6"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("38c7f2b0-96e5-4895-8db4-5e41a403637f"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("b86cf297-01eb-4f32-ba2b-2fb571676753"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("2db35c95-6251-457f-b37b-68beccd58556"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("bcf9d024-a28c-4f85-8413-e3a3ec53f26f"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("7f3bdcdd-358e-41e2-acf0-a5a851832b11"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("b58e8108-c139-4ac6-9374-bfd3285c283f"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("62b373be-16bb-474f-b8d3-c5a26040333c"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("82b831b0-3ee6-46c6-933b-014904b5f762"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("64b0e3fa-b37a-4cd7-a29a-781e38c88af4"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("078b3893-5fe8-4dd8-9d9d-04306e6a5980"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("c6fc1aec-e968-46bd-8ae7-3826536bb31f"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("25ef5d73-aa44-43c3-b28f-6af1054a7c87"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("2fed5728-37b5-4f33-a341-865e744dbda6"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17405716300586560L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.cs b/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.cs deleted file mode 100644 index bc6771736..000000000 --- a/src/Melodee.Common/Migrations/20250226120710_AddSpotifyUniqueIndex.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddSpotifyUniqueIndex : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "HasCustomImage", - table: "Playlists"); - - migrationBuilder.CreateIndex( - name: "IX_Songs_SpotifyId", - table: "Songs", - column: "SpotifyId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Bookmarks_SpotifyId", - table: "Bookmarks", - column: "SpotifyId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Artists_SpotifyId", - table: "Artists", - column: "SpotifyId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Albums_SpotifyId", - table: "Albums", - column: "SpotifyId", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Songs_SpotifyId", - table: "Songs"); - - migrationBuilder.DropIndex( - name: "IX_Bookmarks_SpotifyId", - table: "Bookmarks"); - - migrationBuilder.DropIndex( - name: "IX_Artists_SpotifyId", - table: "Artists"); - - migrationBuilder.DropIndex( - name: "IX_Albums_SpotifyId", - table: "Albums"); - - migrationBuilder.AddColumn( - name: "HasCustomImage", - table: "Playlists", - type: "boolean", - nullable: false, - defaultValue: false); - - } - } -} diff --git a/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.Designer.cs b/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.Designer.cs deleted file mode 100644 index 6da6780bd..000000000 --- a/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.Designer.cs +++ /dev/null @@ -1,3204 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250301215628_AddValidationMinimums")] - partial class AddValidationMinimums - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("a95a4da7-d3a4-4f78-a771-b9af7d16c189"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("5503e1ff-0a2e-4e00-a785-81133463cad3"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("4ff4b4a5-d535-4ec3-b202-d4ebedbd2811"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("3b51b4b4-0898-42f1-9e63-fc73abc8c74b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("c470bbef-80eb-405d-a954-d493cf68956b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("9906ed17-5567-4164-aecb-2fd2f6cbe3dc"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("36517f17-2a14-4b5b-92ba-081e5da74038"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("b47223fe-764a-4488-b987-e04b2ada59a3"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("81bdee46-10e4-4c9e-9c9a-845477a8f7d2"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("da9fbf3b-9b9a-462d-8ce2-f817dd78f8d7"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("4caaf87b-12c4-4ee0-a74f-91a699307ce2"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("470124cb-1fd3-4a38-89de-ea36f936d342"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("fe4535f9-84d0-4c8b-b1b5-346427bfe834"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("61e1072c-6ddf-4129-8efa-92fcaa69dcfb"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("577dc823-9766-408a-805b-c68f02ee307e"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("abdc60c5-0cd8-4c4e-a9c9-00b9eb2062bb"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("5aa522bc-ee0e-4c0c-9b6f-08e10f4bbe86"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("70f44a16-862a-4131-a332-d992f9c6382d"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("736a151a-f9e2-42ab-944b-08f5735d0448"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("d9a52403-894e-48ee-ae07-464f8271ca11"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("469e7313-d3f4-466a-909c-73be17bdc934"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("8675e14d-1b61-4337-aa92-92839809037f"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("d7988322-f621-4500-88bb-48192050e20d"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("5df73f3c-44a0-4035-ba09-306dd279ce25"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("ed7891c9-b3cc-4c78-9fa5-4c64d4387638"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("7ea302b1-9ecb-409b-bd8b-5ea1a84bd25e"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("4e23de42-7151-46f9-b040-941ce739dccb"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("00a05935-0dce-497a-919a-17cc1f518497"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("fde0668c-ff10-434c-8cf7-b013f581a83c"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("66bbb866-ab31-43fe-a01c-9e085b9a1453"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("ae3716a3-6a23-48d6-a669-e3c4fd91bba9"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("6a1cd88b-abfb-45ae-923f-8c9b74798142"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("0606bb62-f6d5-4872-ac76-bb5df3d886b6"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("84e84fe8-badc-4481-9e23-1998b094ad63"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("95967f22-f66b-4be2-89c1-d6b0c747c127"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("0ec9927e-7fc6-445d-9c85-f349dd7b16d1"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("973aa487-151b-46d0-8cd6-53f0499509e4"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("5cb658b3-09f8-4a53-b50b-90b2efe2d524"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("4395bbb6-d665-43eb-81c2-d47aa668907d"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("8d91883b-7399-46e8-9d20-95ee4b360212"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("a27827f4-66f5-45b1-9d74-d15f01f8640b"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("bcb7de79-a15f-4d94-9f75-a8fe5b846147"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("22a991cf-9a19-487e-9468-bc64d1dc1304"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("6977d8a8-c5de-4afb-9be6-0ce7e95cd55b"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("0e4ea8b8-bb64-4b87-bb99-65c522ce4f07"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("ba9721e0-4ba2-4874-a926-57b33a415514"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("fd5b29e1-1469-4d8d-87d9-afd65b4c1d5e"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("d4cc094c-de90-45b5-809a-bad2e8dab228"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("8821e3c2-9ed1-454c-bd10-442d2d138695"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("b70e6248-3b55-4c55-a82a-63855b639027"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("aba690e6-f4fe-443d-a5dc-ebc6de1afff9"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("dd197568-64c5-48e8-9a93-9562c0f9d7dc"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("5cb1bc9a-3e16-4a44-94f6-f1d8bb5213f0"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("ae60e622-c179-46c8-9dc8-45245ec6e3c6"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("b73d91b0-2611-498b-8596-01fc0f0005bf"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("bfdd69ab-384e-4638-a6d5-dab0d358cd9b"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("62f7a205-2bab-4c2e-9b1f-9a5132b4ce4c"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("9e483826-8e4e-41fb-831e-de98a3615363"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("f86332ee-d932-4fa5-8639-4471e03d5769"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("e5cf4703-4b3d-4b82-843f-cc51fc62f5a1"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("c779c1e0-6fcb-4b9d-8312-c31c9716e147"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("bba60639-fb00-4c68-b591-29d2a41e3590"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("e071c5b7-4720-45b0-8ebd-891d39711731"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("9f89894e-9201-45e2-910b-655f684e63ee"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("82107526-3086-4397-8df0-0f7ade63db93"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("03c432af-1246-4bb9-a893-e1bf76958851"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f8af6eda-01ff-467d-8ebd-c582d0542511"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("ee2bdb3c-28f6-4481-b280-d6ff54d3042c"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("95dbd1a9-aee6-4819-9f6b-30ef15b86c38"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("89e8dcf7-78e4-42e1-94c1-956f29a59d2f"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("d1ffc276-abb6-45e3-9986-ba1c12227e01"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("c3640d92-7e48-47c5-a133-af60f2053d49"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("c24fcf63-b7e9-433e-bddc-5b26b24897a6"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("7d7bf159-142d-47f2-9514-fba04e77becc"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("3f7b4b83-c2b4-4df1-80d0-66b6a3627a3b"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("804f0bec-d3d7-42b2-b8ca-dc7678eeba6e"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("a63853d1-f0a6-4f5e-ad62-c854bbb1ff93"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("e48028d0-b30a-453f-bf45-bdba47c6e12e"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("cb23f5b0-f611-4fe5-9b4f-b537bfffe584"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("ea9eef5f-742e-4185-83a0-401ef5f52e6f"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("39ad3bfb-13fb-4f69-b4a8-62b841939f31"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("559806c5-8c25-48c9-a79b-4b3266571a70"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("effc2885-2f70-443b-86ad-1042f2c1e402"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("270d156c-2f4c-405d-9950-abd46ea5dae2"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("0a0c1f1d-4d57-43f2-9b2e-f81735d9c41e"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("8f708fd2-0e1a-43fe-82cc-c4ec42b53e76"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("fe42ed33-8b92-43e3-9d31-fe5bfadd41de"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("18e37e0e-2f55-475a-9dba-6a4ff305fa3b"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("5d930258-95b6-4d3f-a156-63d3f6a23e02"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("721c5fc5-5a9f-4aa9-9343-7cc316cf0285"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("b897a81f-07a3-4bf8-9806-b3652a892558"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("31299759-ed9e-4835-aa84-c2a43a0e47bf"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("3eb8fb0f-d5ab-4c26-a274-3e9d343472b8"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("ebdd38c0-5a9b-42f2-bf0a-cc1e47ae1e8c"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("0ded023f-db9e-4cd5-b798-ce2c91846bd5"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("34bd876b-6edd-4c3a-9415-66dc1f3086db"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("7c7abeba-c891-4a22-a434-f7a9d7f57a2c"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.cs b/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.cs deleted file mode 100644 index eeee7a0cf..000000000 --- a/src/Melodee.Common/Migrations/20250301215628_AddValidationMinimums.cs +++ /dev/null @@ -1,1369 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddValidationMinimums : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a95a4da7-d3a4-4f78-a771-b9af7d16c189"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5503e1ff-0a2e-4e00-a785-81133463cad3"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ff4b4a5-d535-4ec3-b202-d4ebedbd2811"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b51b4b4-0898-42f1-9e63-fc73abc8c74b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c470bbef-80eb-405d-a954-d493cf68956b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9906ed17-5567-4164-aecb-2fd2f6cbe3dc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36517f17-2a14-4b5b-92ba-081e5da74038"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b47223fe-764a-4488-b987-e04b2ada59a3"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81bdee46-10e4-4c9e-9c9a-845477a8f7d2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("470124cb-1fd3-4a38-89de-ea36f936d342"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66bbb866-ab31-43fe-a01c-9e085b9a1453"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae3716a3-6a23-48d6-a669-e3c4fd91bba9"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a1cd88b-abfb-45ae-923f-8c9b74798142"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0606bb62-f6d5-4872-ac76-bb5df3d886b6"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("84e84fe8-badc-4481-9e23-1998b094ad63"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95967f22-f66b-4be2-89c1-d6b0c747c127"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ec9927e-7fc6-445d-9c85-f349dd7b16d1"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("973aa487-151b-46d0-8cd6-53f0499509e4"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5cb658b3-09f8-4a53-b50b-90b2efe2d524"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4395bbb6-d665-43eb-81c2-d47aa668907d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8d91883b-7399-46e8-9d20-95ee4b360212"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a27827f4-66f5-45b1-9d74-d15f01f8640b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcb7de79-a15f-4d94-9f75-a8fe5b846147"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22a991cf-9a19-487e-9468-bc64d1dc1304"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6977d8a8-c5de-4afb-9be6-0ce7e95cd55b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e4ea8b8-bb64-4b87-bb99-65c522ce4f07"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba9721e0-4ba2-4874-a926-57b33a415514"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd5b29e1-1469-4d8d-87d9-afd65b4c1d5e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d4cc094c-de90-45b5-809a-bad2e8dab228"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8821e3c2-9ed1-454c-bd10-442d2d138695"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5cf4703-4b3d-4b82-843f-cc51fc62f5a1"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b73d91b0-2611-498b-8596-01fc0f0005bf"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bfdd69ab-384e-4638-a6d5-dab0d358cd9b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62f7a205-2bab-4c2e-9b1f-9a5132b4ce4c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e483826-8e4e-41fb-831e-de98a3615363"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f86332ee-d932-4fa5-8639-4471e03d5769"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("469e7313-d3f4-466a-909c-73be17bdc934"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8675e14d-1b61-4337-aa92-92839809037f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d7988322-f621-4500-88bb-48192050e20d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5df73f3c-44a0-4035-ba09-306dd279ce25"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da9fbf3b-9b9a-462d-8ce2-f817dd78f8d7"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4caaf87b-12c4-4ee0-a74f-91a699307ce2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("804f0bec-d3d7-42b2-b8ca-dc7678eeba6e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a63853d1-f0a6-4f5e-ad62-c854bbb1ff93"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e48028d0-b30a-453f-bf45-bdba47c6e12e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cb23f5b0-f611-4fe5-9b4f-b537bfffe584"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea9eef5f-742e-4185-83a0-401ef5f52e6f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39ad3bfb-13fb-4f69-b4a8-62b841939f31"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("559806c5-8c25-48c9-a79b-4b3266571a70"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe4535f9-84d0-4c8b-b1b5-346427bfe834"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61e1072c-6ddf-4129-8efa-92fcaa69dcfb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("577dc823-9766-408a-805b-c68f02ee307e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abdc60c5-0cd8-4c4e-a9c9-00b9eb2062bb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5aa522bc-ee0e-4c0c-9b6f-08e10f4bbe86"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70f44a16-862a-4131-a332-d992f9c6382d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("736a151a-f9e2-42ab-944b-08f5735d0448"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9a52403-894e-48ee-ae07-464f8271ca11"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed7891c9-b3cc-4c78-9fa5-4c64d4387638"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ea302b1-9ecb-409b-bd8b-5ea1a84bd25e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4e23de42-7151-46f9-b040-941ce739dccb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00a05935-0dce-497a-919a-17cc1f518497"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fde0668c-ff10-434c-8cf7-b013f581a83c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c779c1e0-6fcb-4b9d-8312-c31c9716e147"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bba60639-fb00-4c68-b591-29d2a41e3590"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e071c5b7-4720-45b0-8ebd-891d39711731"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9f89894e-9201-45e2-910b-655f684e63ee"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82107526-3086-4397-8df0-0f7ade63db93"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03c432af-1246-4bb9-a893-e1bf76958851"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f8af6eda-01ff-467d-8ebd-c582d0542511"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee2bdb3c-28f6-4481-b280-d6ff54d3042c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95dbd1a9-aee6-4819-9f6b-30ef15b86c38"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("89e8dcf7-78e4-42e1-94c1-956f29a59d2f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d1ffc276-abb6-45e3-9986-ba1c12227e01"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3640d92-7e48-47c5-a133-af60f2053d49"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c24fcf63-b7e9-433e-bddc-5b26b24897a6"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d7bf159-142d-47f2-9514-fba04e77becc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f7b4b83-c2b4-4df1-80d0-66b6a3627a3b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe42ed33-8b92-43e3-9d31-fe5bfadd41de"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18e37e0e-2f55-475a-9dba-6a4ff305fa3b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d930258-95b6-4d3f-a156-63d3f6a23e02"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("721c5fc5-5a9f-4aa9-9343-7cc316cf0285"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b897a81f-07a3-4bf8-9806-b3652a892558"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("31299759-ed9e-4835-aa84-c2a43a0e47bf"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("effc2885-2f70-443b-86ad-1042f2c1e402"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("270d156c-2f4c-405d-9950-abd46ea5dae2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a0c1f1d-4d57-43f2-9b2e-f81735d9c41e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f708fd2-0e1a-43fe-82cc-c4ec42b53e76"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b70e6248-3b55-4c55-a82a-63855b639027"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aba690e6-f4fe-443d-a5dc-ebc6de1afff9"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd197568-64c5-48e8-9a93-9562c0f9d7dc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3eb8fb0f-d5ab-4c26-a274-3e9d343472b8"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebdd38c0-5a9b-42f2-bf0a-cc1e47ae1e8c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ded023f-db9e-4cd5-b798-ce2c91846bd5"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34bd876b-6edd-4c3a-9415-66dc1f3086db"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c7abeba-c891-4a22-a434-f7a9d7f57a2c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1303, new Guid("5cb1bc9a-3e16-4a44-94f6-f1d8bb5213f0"), 13, "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), null, false, "validation.minimumSongCount", null, null, 0, null, "3" }, - { 1304, new Guid("ae60e622-c179-46c8-9dc8-45245ec6e3c6"), 13, "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", NodaTime.Instant.FromUnixTimeTicks(17408661880505478L), null, false, "validation.minimumAlbumDuration", null, null, 0, null, "10" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03dc2fbf-ae05-4611-8663-6f98bf23a090"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6b3dd7ca-2a29-44ff-a948-7863d2e988d0"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a3c1680a-f24c-4c4c-bda6-88f6c7f7eb37"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4852c3ff-344d-4df5-b6eb-0cc84b645f0a"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("637f4c10-64aa-4207-b63c-93f3d613b30f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7da112cf-ccdf-4c7a-9e8a-55154c3bd8a4"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("11be1c54-11ce-4fa9-989b-66c5fb319aa1"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1334f23e-7832-41f6-a937-0e9586acce24"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af201489-0f1c-4b62-a2ba-e2c9bf84b278"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74cf0f37-1004-41f7-b5c3-a1daf9dd8d04"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("89436ebc-4c8d-4710-bddf-fc7bef8a80df"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("84738b24-e82a-4caa-9907-214aafd5041d"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ff0cea4-5560-409d-b614-9d50e3ca7838"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4869674-2898-4e2d-97df-fdd38972b8f6"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e1ec13fb-e424-4fd5-aeeb-483b47d3bcb7"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93ceb337-77b7-44d7-a809-1cdce9dd2602"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a730fdfa-de27-429f-9fcc-ec14ec88c964"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bbcec87a-4d17-4f39-b420-81a16ceba347"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f11be448-1095-4bd3-bcd5-6262589bb77c"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c6b1663-c41d-409b-a0fb-76d501dbddcf"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("58515e47-e18a-4abc-a17d-011762b7f15d"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("65019ef9-d673-4449-b9bf-3bd52f2c1a02"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3e5664e-bfbe-4dee-a8c8-8af4a3ab9f38"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e29485a0-0901-4d97-a8b6-7698af34932c"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("71590087-df53-4fd8-b3a5-64dbecd4b602"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e721a6b3-879f-4fd4-b847-035201cbd5eb"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6b05d689-573e-4681-86a6-6681bd9c5e0f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62c7385d-08c6-481a-84f5-5f97d848c0b0"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f903f962-c562-4a1c-b6ec-2aee6a36f7af"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc26cb0b-e022-48e0-8b74-b4b3747b2748"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9dbb0096-5dd3-4bef-8641-697dbb313a53"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4c2e973-eb87-4bc1-933b-ae3347bf6ba4"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18a790ba-ab6b-4d18-a24f-e3b26a8f1504"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ccb4adbc-b1ea-4ed7-97e7-5bb1df94a711"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fb531d0-c1a9-42f3-8285-10ec7022d4ca"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc92ffa7-e93b-46b5-9679-1648d593cc95"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7ede925-21d4-4741-bbe8-0d121d9077ae"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("55d65535-601b-4c66-a3e9-4aed50014104"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b14275d9-7d01-4fd2-b7d4-9a38e0ba0b39"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8b2f0d37-5cf6-4502-86ea-13ef595c11a4"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c9e98ee1-7992-41c3-8597-25c9574db930"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1ea880c-6b96-4974-b42c-76d37b0ed1a2"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4afc6747-327a-43dd-9283-8edb3910e9a9"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("40185ca3-8d31-4332-bb04-19e1c5ab5c45"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc4c5df2-1866-4bcd-9c70-5448d1edb0e6"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e86d6d5-a166-4b07-85a5-4d64d73bc5a8"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7e97fbe4-37c6-423f-bafe-ae26c94c3c78"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cb83f80c-5311-4c30-96fa-5fae64f7c9b9"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("83124393-b11e-42aa-aff3-fbb3b44388ec"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("72bd6be9-3bae-4e8f-a3ae-ee525b8d1a1c"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b236d67f-903f-4727-8a21-270df583bfa8"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e58b1c30-9d06-49cf-b935-658a7c00eae8"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62c1ca45-f3c2-4e44-a466-7ba93ede2ab5"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1da5de0-19bf-4515-8812-e2dcd1e8a185"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c03dbdc8-e236-4640-8dd8-d364c289e903"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91162e83-ee3d-4253-8135-f0fbf58adc65"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6fe9b5ba-0ed7-4c24-aa95-3d2bc04868c9"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("837e084f-c4ee-46cf-a32e-25ba5edf24e8"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5f0ab5c-d047-4591-928b-d9c348af9cba"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94d156cc-8d07-4d9c-83fe-08179bb4ef92"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2c5d8a69-ae94-4981-9830-5af9e20b06a7"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3de5835-911b-4058-8cfd-d1426c0b83b0"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51c69a58-9ef3-4ef9-8482-efc55862379d"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("584fe843-086b-4094-bf7b-b6f53c5d0cfa"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53f7f9b7-1d17-4a4d-8175-fd32291e7153"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b46b8e22-9934-4cf7-a506-457c6d41008f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5b1e4c51-8cf0-4af4-8d03-22a9eff5f09d"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22650ad9-3283-4497-a3ca-0674de40c2fd"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b57dbd79-a1ea-4d2e-a6ca-ce5a611f60a4"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca595da3-fea6-437c-a4c0-30d793010f14"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2fa66a14-96b1-476c-a4ae-348c9f48ee33"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("699542de-51a1-45bf-8551-65a5223f9e29"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fea15dc3-eaca-44a8-80a6-c2d8d3588de1"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("64fb3072-e202-43e3-9420-e78a9931a211"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aba9106c-f67d-4b93-adbb-cd307bc2d47b"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ecb5704-ef1f-467c-bc40-3d662464f260"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85dd6de9-74fc-4145-964d-7217a4cd4100"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2db35c95-6251-457f-b37b-68beccd58556"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcf9d024-a28c-4f85-8413-e3a3ec53f26f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7f3bdcdd-358e-41e2-acf0-a5a851832b11"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b58e8108-c139-4ac6-9374-bfd3285c283f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62b373be-16bb-474f-b8d3-c5a26040333c"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82b831b0-3ee6-46c6-933b-014904b5f762"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f2472c26-5e61-45e2-8ee7-e90a12715603"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a35bd21-76d8-498d-909c-28b902b9a2d6"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("38c7f2b0-96e5-4895-8db4-5e41a403637f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b86cf297-01eb-4f32-ba2b-2fb571676753"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2125fbfd-300f-423e-b966-e3cfc7f76f11"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("efc590e1-9bc5-4115-a4d7-21e3e131ee3e"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d76d78c4-a64f-4ea1-8473-7950efcded58"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("64b0e3fa-b37a-4cd7-a29a-781e38c88af4"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("078b3893-5fe8-4dd8-9d9d-04306e6a5980"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6fc1aec-e968-46bd-8ae7-3826536bb31f"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25ef5d73-aa44-43c3-b28f-6af1054a7c87"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2fed5728-37b5-4f33-a341-865e744dbda6"), NodaTime.Instant.FromUnixTimeTicks(17405716300586560L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.Designer.cs b/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.Designer.cs deleted file mode 100644 index b0a3356d8..000000000 --- a/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.Designer.cs +++ /dev/null @@ -1,3204 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250314194345_ModifiedDescriptionAndBiographyLength")] - partial class ModifiedDescriptionAndBiographyLength - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("30df25fb-6e99-4f5e-8d6d-62cc76c6a76c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("5d218e2d-1a3e-4f50-bf16-2bc570c4044a"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("50ba32c2-f8fc-4552-b9fc-fff63539c4e4"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("3ff564b2-60ba-4f51-b5a7-f48cb6413ea8"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("cecc4897-1813-4a67-b31e-9c7eb4dabbf3"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("8bdc8c35-cc08-4dc8-8dc9-d375bb462588"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("b1b5fba6-44e4-4af3-b242-d88513d3ac97"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("95685bb2-aeb7-40db-ac36-be24450505d2"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("1dba6df9-6ace-46fa-a1de-6dbb2d4bdde9"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("0e8702ca-34e2-4814-ae51-ba2a944cc1cd"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("9fc8feaf-4c2a-4e08-8a48-f29369ebd8b6"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("20034810-8282-40ef-a7de-0b9d7532e350"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("ff3c6b92-a886-479c-b149-bc9af8993b0e"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("ae179e29-ef40-416e-9a93-a74627779f30"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("cc35b2c5-e0e6-4b21-b103-484353451014"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("61a117ee-285b-40a3-a760-779a4b444773"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("bc0e23fd-47f6-489f-95ff-6282bcd7dc04"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("9fb144ad-c1bc-459b-b846-9b6e77c49fbf"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("aa613686-dc7f-4d84-a630-18117eec2449"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("3d18694c-88c9-462c-bd07-204e2885045a"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("2d8759e5-d842-4a80-ae5d-03a3539e4954"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("bc140cfe-a28c-4306-992c-413396fd5e1c"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("c1eec113-f4d1-4f6d-b8f0-67cf0386bb4d"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("ca7857eb-3886-488a-a06c-3af3f80199bd"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("032d7c61-4b69-40ba-a42e-7acafd989b17"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("1c94c243-eedb-4a86-93ff-e20de905a61f"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("eaed7c6d-b759-451c-949c-5cd73d3e9afb"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("30778874-6d4f-42e2-9a6c-885441fb9ad1"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("b1140541-92d9-4606-b872-e84af0b38cf1"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("ca15656b-8ffa-4e5e-a179-0987c7002587"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("81e3be25-c037-429b-9041-f57d6a1188fc"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("2d52d3dc-63e5-435f-8494-ff3d25a0ffe1"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("bf4ce5c0-8cdf-4c9e-9330-2d7def82c68c"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("3ccb42c0-ec60-4190-886e-1bde948c861b"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("6740f054-27f3-4212-8d91-2ecbcd9bf049"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("227796e5-e562-4b83-8def-b52dbbd409b9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("c7fe244c-fbca-4ce5-8243-d17c3cd093a5"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("d3bdcc6e-d151-4041-a196-21b18548f6ae"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("1a3cf805-9542-42d6-a22e-86998cfc8cb5"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("a4f05905-7acd-49d5-8dfb-fbb76c6d7323"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4427e0d4-cc4c-4c47-a02e-f30c302f62ec"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("21e8d43d-bfed-4052-bf0b-b5bcd5623cb9"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("75e473b0-09fc-44b9-9e9d-09dde27e157c"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("5a6d33a5-7c3a-413e-adef-a693b518839d"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("04f648d1-5c6a-466b-84c3-452c93b5b180"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("0cce3fb7-085a-4107-b681-39772df77174"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("1f119613-1acf-4a23-b5ab-c88cf976cbb3"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("f147a383-3b30-4caa-ba7e-f67d7867356a"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("6e388326-f7d6-41f8-8184-e7d85fb07727"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("617ce104-40ae-4b16-b1b6-aea45b00079d"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("09a382de-5bb3-43a8-b80f-fee0ff794813"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("35e60eb7-e629-4d80-b337-3cb106e087e1"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("e717371a-f27c-4036-8230-1db976e88db6"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("c6e0d6d5-4e0f-4839-ac3a-04fee12ab308"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("4bd3a069-09f0-4d7c-be7c-c750c3096b50"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("391279e8-029f-4a90-9883-1c5976c88f32"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("ef2390cf-9435-4f5f-bf93-34db0f26f4ab"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("b951528a-dff6-44fb-9ba1-067ce2910096"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("9ce4aed6-abb7-4b87-8440-7926f3d41267"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("9d9ce4ad-cbba-4c2c-9ef0-7075266e5591"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("7c5c05ee-6bc6-4d65-af5b-2fdf897b53ba"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("c14b54f5-e913-43f1-b516-b801cdb16c5f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("91d34f4a-feb8-45a1-9e03-2cd2cd613a1b"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("39f880ba-f014-43c0-bead-c14f6192e93f"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("3f4a23d9-2f92-4851-946c-89fe0bed5da4"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("3dd812cf-8ef6-4203-97c1-cc6f2eb2469b"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("9ecdff0b-cc32-4ff9-9761-a0d1877963e5"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("19c06911-df30-43f3-a66d-5205fc26bc63"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("f40feeec-3772-4ef5-a637-eac5ed1fb85e"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("f8f98336-9163-403f-96d9-0496975bece8"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("336972fd-6cec-430b-87b2-a5c24bb047b0"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("ce0848fa-3e73-4957-a776-990a804c245e"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("5c1a1824-1b57-4ff2-8633-ef59a0381cdf"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("0ebd73ae-dd7f-4dff-b2ee-6701c02884c1"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("292b88b5-f341-4f6d-a9ab-c045f36b2287"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("f4f9c6a5-54e5-4836-9f08-116e1caf7772"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("fd397c66-6d87-4901-9e70-f5dcad0592c4"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("96862b64-c640-4ed0-8e9f-8f48bcdb841a"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("7159bb49-17e9-4970-824c-bd82d9be4c8a"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("7b892184-75d9-420d-907e-b0abbd0664fe"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("1b874c68-b883-49f6-a5ff-c1f161bc4842"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("0205c9f7-470c-41a6-868f-8023be923061"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("a49f0af7-a1ff-43a8-8800-a53720864cce"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("80db78be-7aee-462b-ad38-6a5a470b608f"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("c50b5f16-1f41-4708-b095-5a021ca6b0bd"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("08c3920d-a83e-4402-b063-65c2b01ec01e"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("e75b787e-ca68-4075-ad83-283b255cf14a"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("c1bd7288-8510-45ae-b991-4aa57496dc7e"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("85760e5d-e79a-4155-abd0-95beb04610ca"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("57451de5-0e17-478f-b826-b8a9bb4be5e0"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("9e1e218b-190a-4d94-ad0e-107244de8b07"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("71a99abc-6f6a-4fc2-b71a-c4f3053a1e2d"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("0ae7c0fa-d218-4822-9ca6-c9d207f05eca"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("2a877078-fa74-4f19-80f5-2ab8fa50f3bc"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("d4a44fda-779e-4727-b4b1-d3a478f28e58"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("da3ae30a-a44d-47f4-9588-dbca08be92cd"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("8ddddfa0-dd36-47bd-bf34-d44a08a31493"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17419814249689351L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareIds") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.cs b/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.cs deleted file mode 100644 index 8b334c1bd..000000000 --- a/src/Melodee.Common/Migrations/20250314194345_ModifiedDescriptionAndBiographyLength.cs +++ /dev/null @@ -1,1794 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class ModifiedDescriptionAndBiographyLength : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Description", - table: "UserSongs", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Users", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserPins", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserArtists", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserAlbums", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Songs", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Shares", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Settings", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "RadioStations", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "PlayQues", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Playlists", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Players", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Libraries", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Contributors", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Bookmarks", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Artists", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Biography", - table: "Artists", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "ArtistRelation", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Albums", - type: "character varying(62000)", - maxLength: 62000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(4000)", - oldMaxLength: 4000, - oldNullable: true); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("30df25fb-6e99-4f5e-8d6d-62cc76c6a76c"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d218e2d-1a3e-4f50-bf16-2bc570c4044a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("50ba32c2-f8fc-4552-b9fc-fff63539c4e4"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ff564b2-60ba-4f51-b5a7-f48cb6413ea8"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cecc4897-1813-4a67-b31e-9c7eb4dabbf3"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8bdc8c35-cc08-4dc8-8dc9-d375bb462588"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1b5fba6-44e4-4af3-b242-d88513d3ac97"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95685bb2-aeb7-40db-ac36-be24450505d2"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1dba6df9-6ace-46fa-a1de-6dbb2d4bdde9"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("20034810-8282-40ef-a7de-0b9d7532e350"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca15656b-8ffa-4e5e-a179-0987c7002587"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81e3be25-c037-429b-9041-f57d6a1188fc"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2d52d3dc-63e5-435f-8494-ff3d25a0ffe1"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf4ce5c0-8cdf-4c9e-9330-2d7def82c68c"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ccb42c0-ec60-4190-886e-1bde948c861b"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6740f054-27f3-4212-8d91-2ecbcd9bf049"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("227796e5-e562-4b83-8def-b52dbbd409b9"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7fe244c-fbca-4ce5-8243-d17c3cd093a5"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3bdcc6e-d151-4041-a196-21b18548f6ae"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a3cf805-9542-42d6-a22e-86998cfc8cb5"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4f05905-7acd-49d5-8dfb-fbb76c6d7323"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4427e0d4-cc4c-4c47-a02e-f30c302f62ec"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21e8d43d-bfed-4052-bf0b-b5bcd5623cb9"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75e473b0-09fc-44b9-9e9d-09dde27e157c"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a6d33a5-7c3a-413e-adef-a693b518839d"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04f648d1-5c6a-466b-84c3-452c93b5b180"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0cce3fb7-085a-4107-b681-39772df77174"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f119613-1acf-4a23-b5ab-c88cf976cbb3"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f147a383-3b30-4caa-ba7e-f67d7867356a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6e388326-f7d6-41f8-8184-e7d85fb07727"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d9ce4ad-cbba-4c2c-9ef0-7075266e5591"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4bd3a069-09f0-4d7c-be7c-c750c3096b50"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("391279e8-029f-4a90-9883-1c5976c88f32"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ef2390cf-9435-4f5f-bf93-34db0f26f4ab"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b951528a-dff6-44fb-9ba1-067ce2910096"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ce4aed6-abb7-4b87-8440-7926f3d41267"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2d8759e5-d842-4a80-ae5d-03a3539e4954"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc140cfe-a28c-4306-992c-413396fd5e1c"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1eec113-f4d1-4f6d-b8f0-67cf0386bb4d"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca7857eb-3886-488a-a06c-3af3f80199bd"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e8702ca-34e2-4814-ae51-ba2a944cc1cd"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9fc8feaf-4c2a-4e08-8a48-f29369ebd8b6"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4f9c6a5-54e5-4836-9f08-116e1caf7772"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd397c66-6d87-4901-9e70-f5dcad0592c4"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("96862b64-c640-4ed0-8e9f-8f48bcdb841a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7159bb49-17e9-4970-824c-bd82d9be4c8a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7b892184-75d9-420d-907e-b0abbd0664fe"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b874c68-b883-49f6-a5ff-c1f161bc4842"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0205c9f7-470c-41a6-868f-8023be923061"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff3c6b92-a886-479c-b149-bc9af8993b0e"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae179e29-ef40-416e-9a93-a74627779f30"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc35b2c5-e0e6-4b21-b103-484353451014"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61a117ee-285b-40a3-a760-779a4b444773"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc0e23fd-47f6-489f-95ff-6282bcd7dc04"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9fb144ad-c1bc-459b-b846-9b6e77c49fbf"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa613686-dc7f-4d84-a630-18117eec2449"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d18694c-88c9-462c-bd07-204e2885045a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("032d7c61-4b69-40ba-a42e-7acafd989b17"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c94c243-eedb-4a86-93ff-e20de905a61f"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eaed7c6d-b759-451c-949c-5cd73d3e9afb"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("30778874-6d4f-42e2-9a6c-885441fb9ad1"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1140541-92d9-4606-b872-e84af0b38cf1"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c5c05ee-6bc6-4d65-af5b-2fdf897b53ba"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c14b54f5-e913-43f1-b516-b801cdb16c5f"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91d34f4a-feb8-45a1-9e03-2cd2cd613a1b"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39f880ba-f014-43c0-bead-c14f6192e93f"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f4a23d9-2f92-4851-946c-89fe0bed5da4"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3dd812cf-8ef6-4203-97c1-cc6f2eb2469b"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ecdff0b-cc32-4ff9-9761-a0d1877963e5"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("19c06911-df30-43f3-a66d-5205fc26bc63"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f40feeec-3772-4ef5-a637-eac5ed1fb85e"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f8f98336-9163-403f-96d9-0496975bece8"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("336972fd-6cec-430b-87b2-a5c24bb047b0"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce0848fa-3e73-4957-a776-990a804c245e"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5c1a1824-1b57-4ff2-8633-ef59a0381cdf"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ebd73ae-dd7f-4dff-b2ee-6701c02884c1"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("292b88b5-f341-4f6d-a9ab-c045f36b2287"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e75b787e-ca68-4075-ad83-283b255cf14a"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1bd7288-8510-45ae-b991-4aa57496dc7e"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85760e5d-e79a-4155-abd0-95beb04610ca"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("57451de5-0e17-478f-b826-b8a9bb4be5e0"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e1e218b-190a-4d94-ad0e-107244de8b07"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("71a99abc-6f6a-4fc2-b71a-c4f3053a1e2d"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a49f0af7-a1ff-43a8-8800-a53720864cce"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80db78be-7aee-462b-ad38-6a5a470b608f"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c50b5f16-1f41-4708-b095-5a021ca6b0bd"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("08c3920d-a83e-4402-b063-65c2b01ec01e"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("617ce104-40ae-4b16-b1b6-aea45b00079d"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("09a382de-5bb3-43a8-b80f-fee0ff794813"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("35e60eb7-e629-4d80-b337-3cb106e087e1"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e717371a-f27c-4036-8230-1db976e88db6"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6e0d6d5-4e0f-4839-ac3a-04fee12ab308"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ae7c0fa-d218-4822-9ca6-c9d207f05eca"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a877078-fa74-4f19-80f5-2ab8fa50f3bc"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d4a44fda-779e-4727-b4b1-d3a478f28e58"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da3ae30a-a44d-47f4-9588-dbca08be92cd"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ddddfa0-dd36-47bd-bf34-d44a08a31493"), NodaTime.Instant.FromUnixTimeTicks(17419814249689351L) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Description", - table: "UserSongs", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Users", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserPins", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserArtists", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "UserAlbums", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Songs", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Shares", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Settings", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "RadioStations", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "PlayQues", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Playlists", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Players", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Libraries", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Contributors", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Bookmarks", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Artists", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Biography", - table: "Artists", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "ArtistRelation", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.AlterColumn( - name: "Description", - table: "Albums", - type: "character varying(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(62000)", - oldMaxLength: 62000, - oldNullable: true); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a95a4da7-d3a4-4f78-a771-b9af7d16c189"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5503e1ff-0a2e-4e00-a785-81133463cad3"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ff4b4a5-d535-4ec3-b202-d4ebedbd2811"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b51b4b4-0898-42f1-9e63-fc73abc8c74b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c470bbef-80eb-405d-a954-d493cf68956b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9906ed17-5567-4164-aecb-2fd2f6cbe3dc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36517f17-2a14-4b5b-92ba-081e5da74038"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b47223fe-764a-4488-b987-e04b2ada59a3"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81bdee46-10e4-4c9e-9c9a-845477a8f7d2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("470124cb-1fd3-4a38-89de-ea36f936d342"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66bbb866-ab31-43fe-a01c-9e085b9a1453"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae3716a3-6a23-48d6-a669-e3c4fd91bba9"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a1cd88b-abfb-45ae-923f-8c9b74798142"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0606bb62-f6d5-4872-ac76-bb5df3d886b6"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("84e84fe8-badc-4481-9e23-1998b094ad63"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95967f22-f66b-4be2-89c1-d6b0c747c127"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ec9927e-7fc6-445d-9c85-f349dd7b16d1"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("973aa487-151b-46d0-8cd6-53f0499509e4"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5cb658b3-09f8-4a53-b50b-90b2efe2d524"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4395bbb6-d665-43eb-81c2-d47aa668907d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8d91883b-7399-46e8-9d20-95ee4b360212"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a27827f4-66f5-45b1-9d74-d15f01f8640b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcb7de79-a15f-4d94-9f75-a8fe5b846147"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22a991cf-9a19-487e-9468-bc64d1dc1304"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6977d8a8-c5de-4afb-9be6-0ce7e95cd55b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e4ea8b8-bb64-4b87-bb99-65c522ce4f07"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba9721e0-4ba2-4874-a926-57b33a415514"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd5b29e1-1469-4d8d-87d9-afd65b4c1d5e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d4cc094c-de90-45b5-809a-bad2e8dab228"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8821e3c2-9ed1-454c-bd10-442d2d138695"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5cf4703-4b3d-4b82-843f-cc51fc62f5a1"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b73d91b0-2611-498b-8596-01fc0f0005bf"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bfdd69ab-384e-4638-a6d5-dab0d358cd9b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62f7a205-2bab-4c2e-9b1f-9a5132b4ce4c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e483826-8e4e-41fb-831e-de98a3615363"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f86332ee-d932-4fa5-8639-4471e03d5769"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("469e7313-d3f4-466a-909c-73be17bdc934"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8675e14d-1b61-4337-aa92-92839809037f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d7988322-f621-4500-88bb-48192050e20d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5df73f3c-44a0-4035-ba09-306dd279ce25"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da9fbf3b-9b9a-462d-8ce2-f817dd78f8d7"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4caaf87b-12c4-4ee0-a74f-91a699307ce2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("804f0bec-d3d7-42b2-b8ca-dc7678eeba6e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a63853d1-f0a6-4f5e-ad62-c854bbb1ff93"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e48028d0-b30a-453f-bf45-bdba47c6e12e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cb23f5b0-f611-4fe5-9b4f-b537bfffe584"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea9eef5f-742e-4185-83a0-401ef5f52e6f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39ad3bfb-13fb-4f69-b4a8-62b841939f31"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("559806c5-8c25-48c9-a79b-4b3266571a70"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe4535f9-84d0-4c8b-b1b5-346427bfe834"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61e1072c-6ddf-4129-8efa-92fcaa69dcfb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("577dc823-9766-408a-805b-c68f02ee307e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abdc60c5-0cd8-4c4e-a9c9-00b9eb2062bb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5aa522bc-ee0e-4c0c-9b6f-08e10f4bbe86"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70f44a16-862a-4131-a332-d992f9c6382d"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("736a151a-f9e2-42ab-944b-08f5735d0448"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9a52403-894e-48ee-ae07-464f8271ca11"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed7891c9-b3cc-4c78-9fa5-4c64d4387638"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ea302b1-9ecb-409b-bd8b-5ea1a84bd25e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4e23de42-7151-46f9-b040-941ce739dccb"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00a05935-0dce-497a-919a-17cc1f518497"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fde0668c-ff10-434c-8cf7-b013f581a83c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c779c1e0-6fcb-4b9d-8312-c31c9716e147"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bba60639-fb00-4c68-b591-29d2a41e3590"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e071c5b7-4720-45b0-8ebd-891d39711731"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9f89894e-9201-45e2-910b-655f684e63ee"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82107526-3086-4397-8df0-0f7ade63db93"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03c432af-1246-4bb9-a893-e1bf76958851"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f8af6eda-01ff-467d-8ebd-c582d0542511"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee2bdb3c-28f6-4481-b280-d6ff54d3042c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95dbd1a9-aee6-4819-9f6b-30ef15b86c38"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("89e8dcf7-78e4-42e1-94c1-956f29a59d2f"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d1ffc276-abb6-45e3-9986-ba1c12227e01"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3640d92-7e48-47c5-a133-af60f2053d49"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c24fcf63-b7e9-433e-bddc-5b26b24897a6"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d7bf159-142d-47f2-9514-fba04e77becc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f7b4b83-c2b4-4df1-80d0-66b6a3627a3b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe42ed33-8b92-43e3-9d31-fe5bfadd41de"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18e37e0e-2f55-475a-9dba-6a4ff305fa3b"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d930258-95b6-4d3f-a156-63d3f6a23e02"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("721c5fc5-5a9f-4aa9-9343-7cc316cf0285"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b897a81f-07a3-4bf8-9806-b3652a892558"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("31299759-ed9e-4835-aa84-c2a43a0e47bf"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("effc2885-2f70-443b-86ad-1042f2c1e402"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("270d156c-2f4c-405d-9950-abd46ea5dae2"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a0c1f1d-4d57-43f2-9b2e-f81735d9c41e"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f708fd2-0e1a-43fe-82cc-c4ec42b53e76"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b70e6248-3b55-4c55-a82a-63855b639027"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aba690e6-f4fe-443d-a5dc-ebc6de1afff9"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd197568-64c5-48e8-9a93-9562c0f9d7dc"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5cb1bc9a-3e16-4a44-94f6-f1d8bb5213f0"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae60e622-c179-46c8-9dc8-45245ec6e3c6"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3eb8fb0f-d5ab-4c26-a274-3e9d343472b8"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebdd38c0-5a9b-42f2-bf0a-cc1e47ae1e8c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ded023f-db9e-4cd5-b798-ce2c91846bd5"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34bd876b-6edd-4c3a-9415-66dc1f3086db"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c7abeba-c891-4a22-a434-f7a9d7f57a2c"), NodaTime.Instant.FromUnixTimeTicks(17408661880505478L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.Designer.cs b/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.Designer.cs deleted file mode 100644 index d63409ca4..000000000 --- a/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.Designer.cs +++ /dev/null @@ -1,3245 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250330161225_ModifiedShareTable")] - partial class ModifiedShareTable - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("21cbee19-1fb7-499e-a492-d440b8ee9cd9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("da175112-e1a1-425e-89b7-0ad0b9af6241"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("b771d900-4109-4124-b66c-ebe7af0d6830"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("845de554-6ec7-4088-9c94-73da9186d359"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("a155ad12-dc45-4ec9-b64c-c0f31c16120d"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("4861f3fe-a882-40ed-8787-411db9cd01a0"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("5e648330-a7d5-4280-91ae-3dc9173358de"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("b7f9d3fd-3330-4c12-9c6d-aeaac26ce16a"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("dcc9f75a-673c-46c4-a496-b79aedb27116"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("c0ae7068-ee64-4de7-85d0-4d3d0c68faa8"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("db2c3b41-a8ef-4991-a88c-a26331be5e9e"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("cb92726d-8e37-44bb-9391-bbcb34a33185"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("e6faa01e-a901-4877-b2cb-6f5474d6bd0e"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("515507cb-b7ee-4125-9f40-5027f698cdb1"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("ebbbed82-d88c-4a94-87f4-99f6b97124aa"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("69e3e2fd-8b85-4d9c-bedc-bc52ff427943"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("d2c5cc30-6e7a-4cff-b1b7-8f9612761517"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("243fb05b-eaf5-4234-a87e-6cd0ef03c919"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("3a043c59-8dc2-42e2-88b8-c89a7bea360e"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("316569c9-dbf9-4272-adfc-1a0e61edccd8"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("b0d02e18-9dfe-4c8c-b9d1-03b865dce6a4"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("645760d1-fe0d-4aa3-a241-67b6bef87036"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("e93b7075-e267-4f14-8db1-133ca0746dc3"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f599a0d0-0e62-4c71-9dd8-47c7caa0f97d"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("13323591-23d3-4980-a503-21ecdd88b89a"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("25bf6a7c-fd71-4671-8696-60b6ad45440e"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("0c8503bd-44a9-4bce-98ed-dcb9ae819da1"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("09855f78-86df-41f2-9743-8ade68407fe0"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("f2973d4a-5736-4af8-95ab-b2947d7b09cb"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("5462ca09-ac54-4aa4-961c-5804e0a74a98"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("c37516d7-c7e3-4dec-9ea8-e66e4c42ac25"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("fde4bfd3-9be4-4a08-9846-764fc1919335"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("edb439b5-db02-4f70-9358-12543eca981b"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("b104848e-e7c1-4caf-9d6a-ed70a890ce18"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("61b63b8b-f6f5-4186-9015-66e1cb854834"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("f1de6069-134d-4561-a06f-4f8f312f1c10"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("e0c09fab-233b-4059-88d7-d0462a2d7b86"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("c30ec288-aa79-4077-9247-a685c06aa073"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("8892f506-a2f4-47eb-8656-8388ad5c8a58"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("b091bfb7-8a49-4a9c-9748-3e5fd970fb8f"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("32da5f8c-8fdb-4c78-9c3b-6c30e2880471"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("a901e258-d93e-405c-b069-584a6585e9a6"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("5d7eb933-98ad-4595-bd3f-fa69ca4e523f"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("de753e00-28af-4db3-958c-b80b72a0b7d0"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("f4fd9018-f476-44cb-9d46-1c4083ce9945"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("a5e27952-23be-41b6-8d1d-8d3885c30dd5"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("37d16be1-61ea-4338-bdf6-000a98b5056b"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("281dfc57-613b-4267-81a5-81e825e4eb32"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("50a1bc5f-f9ab-41a0-8e40-fb99e495452b"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("6dc2c208-e301-4900-ba83-fe327ebde6bc"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("f4e1250e-7049-4d8f-8abd-4f5165a6999f"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("5220c4a6-90aa-452c-91c3-fd92d784c16a"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("ea23fbb0-b975-4a4d-a921-ec632655f8ab"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("7f7a66fb-6481-432c-a6f8-a09fb6a93571"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("51c0911f-caf5-42fa-bcf5-f98c24462adf"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("ccbaae89-6fd0-4025-b125-911134e5910a"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("fc0ffd4c-7172-4de6-9840-b48777559ee8"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("1d75fc8b-cbef-468c-8c71-d6f63baceef6"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("9f88fbe9-5b9d-4f13-b021-e1ea73233aa0"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("762b7a47-d9ba-471f-90e4-9369c66665ae"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("b605c264-3ae9-4068-8efa-c8487cbe5b24"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("fb1689ac-20fe-4a8b-a1fe-1dcf96b6b55d"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("5f0fc25c-5618-4aa0-93c5-a95bd38076ee"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("3f51e7c5-afc0-4414-9dc8-fd8e0b94a28f"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("dcb673c4-7180-4f83-aef3-c6a05f382025"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("613523c8-8d89-4e0a-a7a8-9a3cc468433d"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("ed0c5f3f-dcb2-41b1-a16c-ac2a25e35c08"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("ec229a7c-f9e4-4579-9dbb-a0bcb48632ef"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("8dca56dc-6215-4826-8373-e175a22863c5"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("00369836-037d-4e1e-aa45-5df134871daa"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("c35feca5-4bf9-4351-bae5-31d4c03a78e1"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("702ee637-4b04-475c-b968-3488423d7d0b"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("52f8e922-9d31-4c62-bd45-bbca29ec58e7"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("9115fa92-1a04-4214-82ea-9c5ff162c233"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("88788572-ee27-4a49-925f-516da0909bef"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("c38ea2f6-b4dc-467a-b379-9888552c7a66"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("82282d0a-8dcf-4739-abd6-88a6a9e5c1eb"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("58df43fa-a178-42b1-ac35-c6821b4c3150"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("081a0244-1599-47c4-adef-bf2b82132371"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("ae3a5e1e-343c-4b5f-a622-ffe7921ad691"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("76a8ca8a-0121-4ae5-a6f7-50d9f5aab229"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("e7b83040-b6da-40d4-913d-7cc5e49364b4"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("5b2dfe23-1ee5-4dd8-9e78-2a8703b39809"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("eb85ee3f-e148-4670-8efc-415d3a3b535d"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("3aa0631c-d912-4123-af53-52df825fd670"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f9251cc2-5da2-4599-9e6b-a36d7b22b83a"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("ccb3cca0-0564-4a45-9d87-e07c046db17c"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("91e9f721-74b4-4418-96e7-35a97c96db5d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("e21101a7-5b59-48b6-ae55-7a54fa11ef06"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("619047df-bfc4-4e22-ba2b-43a8a44c7307"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("a936ceb7-af9b-4a8d-92f8-4f875bb8c7f1"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("21d7dc95-4115-4321-84b1-927056d7a432"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("789c7426-bcea-4a98-bd2e-0b4675a5fc51"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("db7fe79b-a874-4257-863c-a3c3130342c2"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("a7155d3d-e652-45b9-be5a-9924393bfdc2"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("7e5c109b-be4c-43a2-bdf9-4da86a42c9f7"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("0724c131-b1f4-4c9e-aae8-bc8656548335"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433511450626604L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.cs b/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.cs deleted file mode 100644 index 02e84677a..000000000 --- a/src/Melodee.Common/Migrations/20250330161225_ModifiedShareTable.cs +++ /dev/null @@ -1,89 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class ModifiedShareTable : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "ShareIds", - table: "Shares"); - - migrationBuilder.AddColumn( - name: "ShareId", - table: "Shares", - type: "integer", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "ShareType", - table: "Shares", - type: "integer", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "ShareUniqueId", - table: "Shares", - type: "character varying(64)", - maxLength: 64, - nullable: false, - defaultValue: ""); - - migrationBuilder.CreateTable( - name: "ShareActivities", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ShareId = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "integer", nullable: true), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - ByUserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Client = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), - IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ShareActivities", x => x.Id); - }); - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ShareActivities"); - - migrationBuilder.DropColumn( - name: "ShareId", - table: "Shares"); - - migrationBuilder.DropColumn( - name: "ShareType", - table: "Shares"); - - migrationBuilder.DropColumn( - name: "ShareUniqueId", - table: "Shares"); - - migrationBuilder.AddColumn( - name: "ShareIds", - table: "Shares", - type: "character varying(2000)", - maxLength: 2000, - nullable: false, - defaultValue: ""); - - } - } -} diff --git a/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.Designer.cs b/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.Designer.cs deleted file mode 100644 index 233a8d0e2..000000000 --- a/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.Designer.cs +++ /dev/null @@ -1,3245 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250330162330_ModifiedShareTableAgain")] - partial class ModifiedShareTableAgain - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("1c954fa7-3b0a-4067-a2da-9062efc1993f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("d8d5375e-1d86-425c-9213-37795bb70a80"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("23a083c2-fe32-401e-b71f-48eb85f572f8"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("6e7c6ede-51b4-468e-81dc-17904f76f277"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("2e31ad4c-7bfd-4bdb-a21b-e171ad38ecce"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6c380fdf-c0cd-462d-a69b-ed2d34d64d4c"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("9298970f-d8f3-4665-b2f2-9a1362366844"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("4df02867-dbc3-4258-b1bf-01a255b47797"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("8ec37e86-8f78-43cd-ab85-0ad69ed99207"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("ca2fd75a-b33a-4b1c-acfa-6e59220209ed"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("a6757df5-7b0a-4443-95d9-427c78940327"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("9e9b660c-4fdc-4df5-a840-9ed2f0c61d78"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("9181c47e-96f7-42cb-89f9-266ef406877c"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("ca9e67e8-12f9-4800-8944-8dee5f403aea"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("29ea1b46-0f28-4b6a-85c3-26d0477f39f8"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("8544e00f-da74-4e7d-ab5b-cae641b23ba3"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("3d8354f8-437e-41e1-8c38-54ed06a916ce"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("8f12a494-d664-4fb1-87b2-9da4e6ae5b63"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("77a625ef-84dc-42a2-a743-d596c7eaa8d8"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("11cc54b8-1aa5-482f-8e47-165a64f502d6"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e2c13fad-9f70-4be6-9b71-39fc4c2b3bd6"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("17c5eb45-6782-42c5-862e-581ac66aa5df"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("e7638ae4-41ef-430f-aa0c-d53e009a6701"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("d3658d1b-c689-4847-ad2c-919062819a0d"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("361cb1a7-7f96-4bea-930d-fdc0d5ff6a23"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("073ff408-738d-44cd-a6dc-0334f16153dc"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("3a2a62b7-7f36-4870-9ece-eb4aeb606dd9"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("eb1860d4-ff7f-446f-b7da-f739ae34d30c"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("c0f0691f-2a9e-491b-ad95-99feedb97bf6"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("2bef5e36-8d05-468a-923f-5d565f3b34d3"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("a4f264dd-7f6d-4fbe-b2fc-bcb9570a18bb"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("bfa460d9-2d97-4b13-8d71-f4a8013bdc2c"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("68d1c277-329d-4e13-a9de-132f520aff14"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("a1c6b068-a6e6-46e0-b2d7-bfb9073fd167"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("411e4aad-6c68-455a-be11-f08b54df70c7"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("09eedb51-e6af-47c2-89a2-89a95a14354e"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("6654e5ae-aff3-4dbd-8bc8-3ca178f1316d"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("4cf4ef4c-2758-4893-bbe8-8d544d749a43"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("e66405be-86e0-4947-afb2-043bd77b2414"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("9438bc5d-018c-4906-a49e-d4b54715b8e5"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("ee1eef6e-fa15-4427-8850-c65cadc6f7c4"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("0484bc27-b69b-431b-9a00-6b77ea3faea3"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("684f4c2b-c405-47f6-b71d-edd2d2dd71d9"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("f2d5a3ca-f058-4ab8-92f0-f0cbdff5ac07"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("7f10ab8d-7171-442e-9a48-6a0866d7fe2c"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("d31127eb-73ec-4380-b882-dd712a5a5967"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("c2c2d146-1f74-4821-9e5d-11df772684a9"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("4ca7aff2-7dcf-4490-b9f5-e6edfde6c3e3"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("e96b979d-0723-441a-b762-1453ebbc4906"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("70e8466c-9f6d-4788-ad8e-eec6192569e0"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("7b08e983-9d5d-44a5-813d-4d9f7553dc1c"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("df979a6b-8ab6-4130-9b87-da817fc18dc2"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("9fb89990-0e35-40c2-a71e-75cc9ccd1470"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("a58e44fb-381c-464f-be55-63b0b667654e"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("aaa41817-6249-4017-9931-4e0648be39da"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("af77f7f0-7965-4ed7-b662-12cd3fde74de"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("f41ae6f5-406b-4066-8949-dc11fd81699b"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("dd048d89-d2cd-478e-b107-5b858d5eb1e3"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("aa504647-3f6b-4cb4-931c-d802175fdda3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b43cb4f7-c6d4-4691-ad92-b5613a03b86f"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 902, - ApiKey = new Guid("5357c32e-2336-4413-a159-2a15e2e38117"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("c8a2c143-974c-4730-b8b3-28438a55020a"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("793404f3-94b5-40e3-b35e-01cf7bb3c13a"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("efcef1f1-dace-44e8-a976-8e64c9fe3e04"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("433d2230-db7f-4082-bed6-ca13db7d7550"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fef6c1b9-6d60-4c83-a831-ace64b76ec0f"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("a79a3ab6-d59d-476e-adad-19f6f8be36ae"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("884cedc3-eec8-4618-8a14-0f3987764ddd"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("f24c70f0-0dcd-4370-93de-9e1686411060"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("49a27b85-f1a0-4bae-8208-02679c8e6cad"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("e3d1b023-dc09-4917-a01e-e602382ef5f6"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("6b03217f-e6b1-436e-83e1-276b07ec22a9"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("566c6e83-8062-48d2-b136-1d944ff61479"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("d026c6ae-d82b-4a39-b7bd-a0bad442232c"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("c6531951-e8e9-4e6c-b575-5b641eac1365"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("f24c1761-6ecb-4b92-a0db-0ca205ff748f"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("582676aa-66f2-4260-8212-79d37f0b1338"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("bf383d0a-d3ed-4356-8ac6-79f7e36d2bb5"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("77dc98fb-b418-41e8-be27-714df6f1f0ff"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("2c0e2bec-2616-4e21-9edd-428aeb2b9482"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("4672113b-fab8-4299-a2e1-2e97a4cfd357"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("8b66c451-4817-4f01-8625-2b453a10912c"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("84ff8341-fd68-4ec4-bf56-e19055fd50ab"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("7d40d5a4-01dd-40ec-b89c-16aacbc65c3b"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("c16d0f2b-05a7-472e-aeaf-39271032a11d"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("704fd5ef-dce2-446b-ace2-70ec55923e82"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("04b9ead3-2b83-423f-b36e-2d845ea76cee"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("964b2f86-bb93-4170-a257-169d5b900e02"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("25793bcf-1433-45d7-abf8-607657bff18e"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("551d1052-b3e7-4e78-92d3-10432d1e2e8d"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("9a2bdcf8-bd77-462f-93cf-fbcdd07e1874"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("f479d2d5-3b94-4cbd-94ab-564db46102f0"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("126b74d6-3d36-43f7-b8fc-c82af5160473"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("1953d44a-cdad-44e2-89bc-53a28ca69f0e"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("b00fe9b5-0d3c-46e6-a776-e725718db590"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("002f307b-c746-4fd0-bc42-5152721fa8d2"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("ead3eff3-1732-46a6-b2af-d21f9fd5cfaa"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17433518091855113L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.cs b/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.cs deleted file mode 100644 index 9738fa7db..000000000 --- a/src/Melodee.Common/Migrations/20250330162330_ModifiedShareTableAgain.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class ModifiedShareTableAgain : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "ExpiresAt", - table: "Shares", - type: "timestamp with time zone", - nullable: true, - oldClrType: typeof(Instant), - oldType: "timestamp with time zone"); - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "ExpiresAt", - table: "Shares", - type: "timestamp with time zone", - nullable: false, - defaultValue: NodaTime.Instant.FromUnixTimeTicks(0L), - oldClrType: typeof(Instant), - oldType: "timestamp with time zone", - oldNullable: true); - - } - } -} diff --git a/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.Designer.cs b/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.Designer.cs deleted file mode 100644 index 79f7c36cd..000000000 --- a/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.Designer.cs +++ /dev/null @@ -1,3256 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250418210609_AddedDeleteExtensionsSetting")] - partial class AddedDeleteExtensionsSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "AlbumId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("20b55826-9bdb-43d1-844b-df208e41df17"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("25a0dc54-5cd3-4afe-97e8-d8eb4fe65270"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("7e58b2f0-9e36-4e01-9be1-4338164a7182"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("6b067af8-3d95-4fe3-aebc-978e97aafc74"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("a16df806-e1fd-434a-82a4-dcc1d1781200"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("1522b3db-b2fa-49a4-94e4-a4585525c53a"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("454d884b-e97f-4ba4-82a6-52d02663a8e5"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("609cb530-a9ef-42ac-8430-9fef6edcc63d"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("c5e5d25b-8ec2-462e-957b-639ad071dad3"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("2a4efd1f-6963-40e3-bc31-5ac447ba71fb"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("d5e2991c-c09d-4479-bcc5-15b3efff4b50"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("eebe8f02-5bde-41a5-8683-6933667f33e0"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("77b21163-2bb0-4560-8949-0756785c0c47"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("96b28692-8506-4bcd-986b-b2c472f71a67"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("34a4b8de-4131-46f9-a903-4501904652fb"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("87fd4307-39be-4372-b5a8-a2d4630b804a"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("3b6b708e-f90d-46e4-b178-377d2e629a89"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("f4d95dcb-2feb-4b17-afc5-61346106e044"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("6aa6c7e3-e0d0-403d-802e-74a104d6e1ee"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("9388a5e9-4437-44eb-8f2e-8592e7198f54"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("a8746811-f8f4-4fee-a6d0-015dc46408e2"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("385865e6-7fb4-443d-be7f-137ef66292be"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("944f37b3-dd4b-4df9-807c-102abedb60f6"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("5d91b3cf-88b3-49d8-b8e9-4791516f1a8d"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("359018ea-c41a-4ab5-865a-d45853c3b55b"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("5e85739c-555c-4c18-b559-d00c9f0d3ad6"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("c87b43b7-e05d-4715-b90d-807ab6cac9e0"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("aae620d2-049b-4e07-bc4c-014ee605ded3"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("f0847029-02e1-49f2-8569-18e492e95792"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("3315930b-dfe5-4744-9aba-f1fc8e910610"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("6ead0a22-7257-44ce-baf2-59b5a3fd4d33"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("40f8599b-f6c4-406f-8f47-a329158d87eb"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("8858f3ff-2517-436a-bc32-be80836319e8"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d1799a0d-3fdf-4e37-b81c-e34e051940ea"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("a770530d-d9f1-419a-b75d-1cf1503a1a61"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("855d9a7a-fd89-46a4-a213-1e1690ff9727"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("ca64ef82-8138-4ffd-ac13-0ef349f519e2"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("805678fb-b4a5-4ebd-8082-6bf22b1a91a7"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("e12fb77c-4d2e-4f64-be28-2654d2099356"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("58f8e174-7255-4eed-a927-b7ad595ad995"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("40c447db-6c97-448c-b3a0-6d980069eebe"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("27ef6fd0-0276-4f17-a33c-f8cb82d63eca"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("38d5e5f2-52ec-427f-9647-24d9b34c73d3"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("5c8bd6ef-ff13-47be-ac37-a30c7e9075a4"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5b6826d7-99c1-4623-82a7-a606e57fd9a2"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("9ccec33a-3998-440b-ab44-8fbad0bc606e"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("cee16742-e0a1-4b1e-a55c-1e2a0b55f5b6"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("5a3608a6-1b3b-4883-b7be-b210e1904f9c"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("1b1fdce2-990b-4415-a98c-35b70cebb4cd"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("7542d26b-dbe1-428f-84e0-b5bd10167344"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("280a94a0-79ae-43ad-9277-f2983e682b9a"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("22b018ce-e0c7-407d-bd49-4c63d80e83ab"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("ed359c67-d5c5-42a8-8ab4-ba04499da8f1"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("7f17ae06-11e3-43a2-ad33-310c8b9ba857"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("e8353547-d71d-48e2-9290-7319e0063e84"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("42535eb0-a9fe-4502-826f-bcd08cfd0837"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("dcaa7bf5-cd17-4ce4-905c-530973974ffb"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("fe01abca-1d5b-474a-a749-8155694973a0"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("d8a0370a-ebc8-4766-9938-18e7ebc8dd80"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("923f24f1-6530-4a46-bf85-51dd5d8956af"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("99b37d11-cc14-497f-8b99-5ae46271e26f"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("a0fc5c06-29f2-40c4-ba92-05c9f1f8c123"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("be4fd6a0-556e-4c73-86b0-8c71478d394c"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("b4eaa679-18b5-4bfb-9218-6eedfe1b74c7"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("971ff526-c577-4239-9583-03e195c6b615"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("779fa6de-c879-4e89-9e65-08b961095200"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("1f18ddb7-c4bd-4953-ba98-2f400d75747c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("bc1449cf-0577-40d0-8c71-3dc7b4b9ba16"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("c27456ae-812f-4550-ab24-aaf41ad4e185"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("bbb3e4d0-ab5d-455e-aa7a-46ba485dcd0d"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("fafc8693-12ab-4e6e-8c91-01d2f071fda1"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("25ecf115-470e-4f20-abb9-ebe139d27d6d"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("739cf697-99ce-410e-8391-6a2a8f0e3643"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("321c204b-7adf-4224-bfe3-9c9ec5f7f9d6"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("024cde54-9220-4303-af51-ab22026ad8ae"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("915c81f8-1be2-4dc1-b7d9-ce17e6bcb31a"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("25f52a42-37c3-440f-b024-880511940d99"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("1f174588-62cf-4dae-92df-f1b27ab70811"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("54758137-7649-46c7-b24c-b697f45e7641"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("cffa55c7-bd45-4a0a-8e37-64d8f144860f"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("5c45ebfc-c8c2-4043-ab3c-53d77f89cf58"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("cbdb5640-bffd-40f1-ac2a-ec679e0b0562"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("d54f206b-f37e-490c-923d-1d1b347fcbc5"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("0a13b261-110c-464e-bb67-3e51e754b4f8"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("836fdbbd-0560-4b55-927e-967ac1c6b6c9"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("e14d7130-178b-425d-b932-dc263253a2d5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f77c70a8-fbf5-4cac-b817-b64d22ca5b0d"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("526e5a37-f44e-40ac-8adc-9c6c012c2bad"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("d9cbf8b6-f66e-423d-8c17-73398f828050"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("c5149aca-d327-44e5-a031-1a6113a23f5e"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("f4bed0be-3778-4fa4-b01b-ac578db6bf9a"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("165c3a4d-e69b-464e-8294-947347f54d02"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("926e97dd-b51d-41e5-a0b3-9dc1c1e63edf"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("5ed6bcae-72d5-47a7-b729-41f5545f82bc"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("28052049-d380-4110-a31c-e351d6876e4c"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("f581c7af-08f4-40ee-9677-0e0193e7771b"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("4bcdf0bd-692e-412c-bdad-ad0d3a3c0eba"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("d6ac8218-f1fe-4c7c-a893-b5137fc797c6"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.cs b/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.cs deleted file mode 100644 index 024c2fad8..000000000 --- a/src/Melodee.Common/Migrations/20250418210609_AddedDeleteExtensionsSetting.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddedDeleteExtensionsSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 54, new Guid("99b37d11-cc14-497f-8b99-5ae46271e26f"), null, "When processing folders immediately delete any files with these extensions. (JSON array).", NodaTime.Instant.FromUnixTimeTicks(17450103681440965L), null, false, "processing.fileExtensionsToDelete", null, null, 0, null, "['log', 'lnk', 'lrc', 'doc']" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 54); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.Designer.cs b/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.Designer.cs deleted file mode 100644 index 923c38452..000000000 --- a/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.Designer.cs +++ /dev/null @@ -1,3256 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250420152429_ModifiedContributorConstraints")] - partial class ModifiedContributorConstraints - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("3d3d5275-200c-4a1b-90f5-1a635637e5f0"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("c16e3629-e2f3-4c79-82a3-20aa447a0065"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("d2285b40-f439-4c54-92be-8a0c819daf2f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("3643f771-0688-45f7-8c84-7295f187c3d4"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("e30a052a-b491-496e-9933-f3547a27f9e0"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("52ee330c-76d7-4cab-8ffe-a70ee404c931"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("5f7b64e1-45ef-4652-be6c-a6f8d6019b3a"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("30fe7c75-fb1b-4a7d-8b50-862d55859bca"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("55e153c3-93c4-41e5-993a-a145e41bb5fa"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("d247420b-1f9f-493a-b403-9018d7102f86"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("61e8cffd-7781-4b9a-9d64-8e38dd534f9f"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("f2511e37-a019-4bd1-aa51-403503f6d2a1"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("5c20460b-d976-4ef8-bbb3-b3108929d22e"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("576b061c-79e1-4d4a-bf00-04374e1dc39e"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("0ccbeb24-94b9-4cd6-a850-6fb69f5b15db"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("243d1a1f-d39d-46ed-80ed-d63943e1441f"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("a2a004c5-59ad-4041-ab9d-c46a0e6e0749"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("116e19b9-01a5-4c91-a1fb-75ec62242d98"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("9bb21d0e-5b76-4db3-baf2-c0b3dffba84e"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("702fe19b-54a5-4bc6-8ea2-68537fafa58a"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("6c65604f-e1c1-498d-b1a7-e7554d158f74"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("641d952b-fe3c-4cc3-8e2c-428aaffc50ab"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("7bd93c06-4e1c-4697-80ac-08006847fad5"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("d6b88545-9787-493b-84bf-baa2a17afa6b"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("242b6edc-c84c-43cc-86f1-462fe1b1c13c"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("e75bcafe-9c5d-4e6c-8fa8-d936fed48442"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("79720b15-e642-426d-a178-12ab91c8a624"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("d37fc3c1-29fd-474f-bf87-7d165236b393"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("3de762fc-5c15-4afb-a68b-64ad0d23f892"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("fa0b7392-fa38-45b8-b067-8f6b8781e890"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("c8cde923-44b5-4aef-ab4d-15e63308c7c1"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("2f4b87ad-6088-402f-b913-8223d3738dd7"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("94f59856-0eea-47a4-9a2d-205664d79d07"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("9e3b9438-485a-465b-8cbe-4170ef900b79"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("21d11a39-f5cc-4c96-8bc9-75d92f956c37"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("e4c9d0ae-3134-45cd-8db0-fd9884a558ba"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("eeb85100-da60-4db8-80f0-d8fe676f6ad0"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("1ea1e610-5e2d-4085-824f-6bde11cb97ca"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("458da5e9-60da-4c5b-9eef-73be40ecdbf7"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("2bfb13da-e38b-42d5-b193-3d6955191053"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("149e7c74-e97d-4719-91e6-60b48bc271b6"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("926c58a6-d9bd-4922-b763-d4b924877fef"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("7e8baf4a-bb45-4433-910d-873ca8de6e1c"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("0e51d75d-9e61-471c-a7f6-b9583a601c58"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("97619b85-8531-4c5e-88e1-5ac6fcbb1e19"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("5efeec01-444f-4f3c-bbb6-75e7c59cdc61"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("ccb29dd7-bd87-4b27-a70e-479780377778"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("51cff6ab-3134-40df-a0e8-f2efefd550c0"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("429875ab-f1a6-42b3-b414-40a8003c52cb"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("0a9e4959-8d29-4b9b-b328-fb2e9203bf79"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("1aeb26de-dbe2-44ec-bb46-85728bdfab9a"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("20769204-8ff1-45db-96dd-c7cbb32427da"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("288952e7-f876-4912-96e6-3749ffc0fcdd"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("dd44215e-7fc5-4b97-a591-d497da3c360c"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("7f7165a0-5c6a-48a7-adec-88166f533afe"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("ca44147d-4362-47cf-969c-102177228ca5"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("0de17ba3-a865-4672-ab15-e1a9a0245042"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("5512b867-6bac-4cf0-8d6f-16a39173754b"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("325e02e9-b047-415c-970e-59870b647667"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("cac706a2-af4d-4230-9a7c-0cb84ec43e2f"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("e6e1a26c-1e4e-46b3-9093-36ec0334745d"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("a8d9ca02-99ac-493c-8abf-301f25f51e07"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("e0272214-4497-4d8a-8544-f893c1ed4257"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("6f0c2237-b9bf-4fdb-bf7c-dfe95d57a86d"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("dfb97765-ed13-4530-bfce-ae949da3ddb2"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("a816db34-f49e-4011-9306-527f9d42916a"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("6bf94d59-2fa4-4d38-9286-22cdac0e00c4"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("d19265ac-56e2-411e-aaf1-ec9ae3378175"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("26adff87-c362-4427-a6e2-68cb79d0e83b"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("586c0c5c-bcf7-4d8e-887e-03297be1afd6"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("1c00d04b-01cc-4629-aac0-50e5227d57d0"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("da2b1c60-39f1-4196-a695-cc63e9334419"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("691186e2-40fd-40a1-af94-023fb11638dc"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("6f5a92b6-f6a3-4511-b08a-b83611940711"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("59d1535f-c2f3-4270-abc3-1cf69141e9ef"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("b760fdb4-8045-425d-83f5-7dcd25c86306"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 400, - ApiKey = new Guid("c7347f88-3f71-4fba-ad4c-7569d5ecf36b"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("f1df5109-5437-41f6-a149-6e0dfc0d5473"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("1ae32fba-0fdb-4425-bde1-4ec7f0d8c038"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("d13aa9f4-e323-4343-bd03-b7548d716f65"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("af630297-f6d4-47f9-ae73-e77fb93d5386"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("fcb2de4d-b441-4423-b50a-38fd19556555"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("bee7d287-af0c-4d63-be21-fe7fab0c2e15"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("19b1a78d-cce7-4452-8b04-d0e95c62ee0e"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("c353ce77-9ddd-4079-bbbb-387e5bb1e45d"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("2c7a176e-b20a-4ad6-9aa0-31d1b5de18dd"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("43212a16-d92f-4bd5-a4a8-fc1f20810e2c"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("39733e52-e113-4800-a84b-cd1ed9161168"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("5fc21ba3-7c1d-4cb4-a084-d124db2e31fc"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("1d145c2b-bc87-49e4-b1d5-e1a5b627d84e"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("1115b798-e086-4de6-a145-ce81398ea009"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("6ae41482-f683-43d7-8700-5e4e7b77978b"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("693b6087-d10b-4afd-bb9c-844a985c9059"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("041c58ec-8be0-4443-9d33-a72cd246af94"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("3d067f76-0b5e-4162-a52d-86d7f626520d"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("54b6aa38-5cdc-4864-bbd9-7dd82afd7705"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("24ac12cd-319b-4c76-9874-d8c9b919d8b0"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("84baa634-ce8a-472f-81a0-a5bf85faee70"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17451626686355111L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.cs b/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.cs deleted file mode 100644 index e1f2a6345..000000000 --- a/src/Melodee.Common/Migrations/20250420152429_ModifiedContributorConstraints.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class ModifiedContributorConstraints : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Contributors_ArtistId_MetaTagIdentifier_AlbumId", - table: "Contributors"); - - migrationBuilder.DropIndex( - name: "IX_Contributors_ContributorName_MetaTagIdentifier_AlbumId", - table: "Contributors"); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ArtistId_MetaTagIdentifier_SongId", - table: "Contributors", - columns: new[] { "ArtistId", "MetaTagIdentifier", "SongId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ContributorName_MetaTagIdentifier_SongId", - table: "Contributors", - columns: new[] { "ContributorName", "MetaTagIdentifier", "SongId" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Contributors_ArtistId_MetaTagIdentifier_SongId", - table: "Contributors"); - - migrationBuilder.DropIndex( - name: "IX_Contributors_ContributorName_MetaTagIdentifier_SongId", - table: "Contributors"); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ArtistId_MetaTagIdentifier_AlbumId", - table: "Contributors", - columns: new[] { "ArtistId", "MetaTagIdentifier", "AlbumId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Contributors_ContributorName_MetaTagIdentifier_AlbumId", - table: "Contributors", - columns: new[] { "ContributorName", "MetaTagIdentifier", "AlbumId" }, - unique: true); - } - } -} diff --git a/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.Designer.cs b/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.Designer.cs deleted file mode 100644 index e906397d5..000000000 --- a/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.Designer.cs +++ /dev/null @@ -1,3280 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250427150441_AddedDeezerSearchEngine")] - partial class AddedDeezerSearchEngine - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique(); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("44175952-2a41-470e-b240-daa7fe6e1ee4"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("38270c51-5757-43a2-b422-cd8f92c10e27"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("65c4431f-fd58-4025-8bd7-0bb9b2f63594"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("dc3bb2ea-d4d3-4f87-81b1-d12b19a0a0dc"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("35f4ddec-6b04-48cd-97ee-01eaad888c13"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("64c097c9-09cb-485a-8624-a6d11dc4855d"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("ebb88fa0-ceca-4a37-b4a1-a46b1b8a8b47"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("3ce6340c-7ae1-46cc-818d-41838a962923"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("17cbcde8-960e-49ba-86c5-c75af2a48f1d"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("93ebc5bd-6bf4-4058-97f2-b72b8147ff4a"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("c5a61230-6b93-43a9-be44-88e8d1ade94b"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("995ad789-9769-4c24-9d26-c389886febc1"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("47da1d83-ad07-4d80-8456-0f064bc2a312"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("aa6a2329-4bb6-4f42-b14a-c42ef83f1a6a"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("a2f6013b-8d9a-4371-93ad-555e6743d3a9"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("4dfaf8ef-a9fa-419d-b3c1-3d18ca4a85a9"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("e8435e88-9ffc-4ee3-8949-c13ef1d4e10b"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("ae367a88-3a6d-4c02-95e2-a2357be29938"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("8890c36d-ef6c-45a8-9dc3-f497715e55fe"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("2164252e-31fa-4bd4-a74a-56a5c900bfd6"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("b1b4193d-964d-459c-bb4e-cb0e04a9e97f"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5934d727-1900-4db0-b546-05cbc4c63031"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("2555cc81-fcb1-46f9-8460-6505e570d484"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("368ae714-c11c-43f0-b093-a49a2fcfa293"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("c5f11998-69e1-4093-be42-c2e9218ceedd"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("adb344c5-5218-47fe-9e3b-80fd7ae68d2b"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("24113793-b7a0-4beb-b0a4-f73f255096c1"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("14ae9e78-5310-4159-805e-4f5877f2318c"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("eb336670-afa3-4d8f-af09-517be7e1f219"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("64cf87a0-73b9-498a-85c5-529f1aaca254"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("a08c0cc0-9fbd-495e-91f7-8328462abfb2"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("f9d0a19e-0f13-411a-b11a-c52903fef855"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("5e09a8b3-c3d1-4131-8e9d-5f9edd167442"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("e3b88163-ac5e-45ec-b78c-2240acb0e6db"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("275ed7d5-469f-4b0a-a941-63dd2ea31a56"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7c4afe94-27e3-426a-ab2b-84e75bd6e017"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("ffb01250-fe1d-4782-b3af-47df1722ae65"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9d37a7af-0055-472d-abc5-9fcbb3529faf"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("f2117f0c-28bc-4f04-ad3f-134dfd0f2e2f"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("0ea07ebf-c8ae-4a48-8d9b-d52b3306ce7a"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("b1f61689-a23b-4d44-9dca-67dd6af91d32"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("4813611c-1181-47c4-9c18-31c9fcdd20b1"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("659111c9-9531-4e93-80d5-84a755221022"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("aff77d81-adcc-46b9-9098-dd23c9f2088a"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("7cbbe133-86db-49c4-acf8-d49b70085327"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("cb1c71e2-b4ee-4691-ab06-d11b1ae8625c"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("531edc76-5cec-473b-b6ac-497ddeac56be"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("85bebf81-b731-43b6-a34d-167af14cf068"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("91c58c3b-6add-4d6a-8527-759d8277e36f"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("7e69eceb-c6af-4a9a-8fa4-c3953597553c"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("54aa6df0-7bdf-4261-90b7-65365f5285a3"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("394e001f-da2f-4786-bfe0-cacbef04628d"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("c1637458-78d8-4659-be7a-d8e3389aa4ef"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("ac5da157-6a1d-496a-821c-3fe73e7557af"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("94d50c2c-60a6-4152-abe1-0c6f8639419e"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("950d265b-0c37-49dd-9c74-8d7b204bdba6"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("31e970a9-f7ee-4486-9908-0f0fbd8252a8"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1 (beta)" - }, - new - { - Id = 103, - ApiKey = new Guid("213f96f6-3298-4204-943d-c5b836378f29"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("70a39a75-1833-46b7-876a-9ebdcd161a12"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b453b989-4dc8-4b45-974d-89f555015c7f"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("6d6aa7ac-d1d5-421e-a9f1-8fe425e2dc13"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("c8f1e967-551b-4802-b447-05b1ed8fbc7d"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("e7944a8d-bf39-4dde-8516-faeff13a863e"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("10704115-83ae-42df-a542-0b0681e561e5"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("e4da4d74-9cde-4cc8-ab91-b8fcbd48a311"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("fd3d46bf-0263-455f-8802-2d6534c18de6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("031d0356-6d25-491b-bdbd-c0cda92d0218"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("7fcb1315-bd40-4855-9564-12a01e9b859b"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("0065481e-7345-4a24-8ee3-5cbac7b2dda6"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("5cddd44f-f05c-453c-9ba6-fd870b80e08b"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("591f11fb-2b15-4edd-b124-f95b1ca255f7"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("a045afda-2756-4d60-aac6-6bed508e95c6"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("6a6a4377-6934-4226-bc39-71716d8f61fc"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("ed6afb5e-e10c-4694-843a-3cdc9652240f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("cef48d57-3f40-4786-b4c2-23f4700df9bd"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("645e0474-7489-4661-99ec-6e3311fb6fae"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("6efc0442-0d11-435e-b17c-9dd89a1006fa"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 400, - ApiKey = new Guid("0b157344-a116-461e-8e5f-328d54827a0c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("23b946a1-6ff2-4b94-8acf-e0057c22bea5"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("1d3cb28d-87a0-4f3a-99a1-0538b691d03c"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("0ef75d81-ff39-4b4c-b668-7de947342f2c"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("3b99a9b8-6931-4f60-9e54-013df13343a9"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("bbfc072e-cc55-4844-956d-0f9fc9212912"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("7470cfc7-cf31-454c-8749-8040d95c64ec"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("1fcb0e11-5dc8-4647-9bab-beff57d2c60b"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("b52d06cc-f23c-446a-b2c5-b2c8ca4a5e65"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("a7a9f11f-2cf5-45e0-ad1e-af067f0843cd"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("a2dceaa9-8f9d-4b15-a93e-9967f090a54c"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("fd0be6fe-2083-40d9-bbaf-f9069a4f5b99"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("12dfaa5a-159e-4dd2-b5fb-0bfcaf37ba98"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("224af850-3a00-4233-9e2d-a416f0fe054c"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("1b7acfff-a83d-425a-bb8e-4a68e9a43518"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("d60dd63d-823e-4654-90c2-1e34bada5f18"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("4539c70c-35bd-47e9-84b1-ae13b4a5c6c6"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("07b5481e-5e0f-4c41-af91-7cbb32a71d22"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("d0883299-3971-4a9a-a673-aab98a8f404e"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("70ba4874-fe8a-4802-a5f2-262d102c5d63"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("4a6a0fa5-8b0f-4120-b080-6d9d42086d93"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("2c0c64b9-1d2e-497f-b2cd-8b96604290b6"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.cs b/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.cs deleted file mode 100644 index 717309c83..000000000 --- a/src/Melodee.Common/Migrations/20250427150441_AddedDeezerSearchEngine.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddedDeezerSearchEngine : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "DeezerId", - table: "Songs", - type: "integer", - nullable: true); - - migrationBuilder.AddColumn( - name: "DeezerId", - table: "Bookmarks", - type: "integer", - nullable: true); - - migrationBuilder.AddColumn( - name: "DeezerId", - table: "Artists", - type: "integer", - nullable: true); - - migrationBuilder.AddColumn( - name: "DeezerId", - table: "Albums", - type: "integer", - nullable: true); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 918, new Guid("6efc0442-0d11-435e-b17c-9dd89a1006fa"), 9, "Is Deezer search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), null, false, "searchEngine.deezer.enabled", null, null, 0, null, "true" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 918); - - migrationBuilder.DropColumn( - name: "DeezerId", - table: "Songs"); - - migrationBuilder.DropColumn( - name: "DeezerId", - table: "Bookmarks"); - - migrationBuilder.DropColumn( - name: "DeezerId", - table: "Artists"); - - migrationBuilder.DropColumn( - name: "DeezerId", - table: "Albums"); - - } - } -} diff --git a/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.Designer.cs b/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.Designer.cs deleted file mode 100644 index 619e28d1a..000000000 --- a/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.Designer.cs +++ /dev/null @@ -1,3281 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20250716170825_UpdateLibraryTypeConstraints")] - partial class UpdateLibraryTypeConstraints - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.7") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("c812ffa0-1cec-4284-aa1e-71a46527758f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("0a566bec-f5bf-40a6-afae-c0ae342e9c52"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("1dd63cd8-1f62-441b-bfde-58f89559ac69"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("ca1b5183-2816-45a1-9c6f-e00c1727dcee"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("8464bc2f-47eb-49c8-8e8d-39ff88c84a5a"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("75db42e1-f0fd-4295-a7db-6104656dd57c"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("71c2bd5b-3069-4244-a313-790f739646b7"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9287aaa6-0982-4fdf-8f68-7dc64c514abb"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("80ced0bd-8ee1-417e-bbb7-a55b1699fb05"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("25503f74-8750-4445-a023-971485537085"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("bac12225-30ee-44a6-855b-c237314fa2e8"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("a0547b74-6be9-48ca-8a33-dcb91361c25a"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("482b180e-811d-44d0-bce7-8fb2d581d9dd"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("04b1127e-a11b-48a9-a346-75a1cc694cb2"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("358026a5-6c9d-46a3-b7be-27b96f62fe69"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("1ca2b3b2-7a27-46fe-8c6f-aee488aeea1f"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("4b422f00-21f6-4369-82ad-001c7c58adba"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("b3b81fd0-42bb-41c3-af63-bdaf8341b7f2"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("272d2704-9dcd-49b6-8f25-cd72f686d2a5"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("7e3c8ba3-0832-4dbe-b029-6d91273dba60"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("1e87aa59-4703-4a8f-94a4-d8b7c874a060"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("91a66eca-2aea-4837-8b8e-87cda9594ca4"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("a1fb3000-d26f-4872-b2a2-9654f0b85150"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("c0f0155b-ac6e-40ff-b8fd-e22d0d2a69ca"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("1a00773d-404e-4af9-ac46-f8b4bb56e1f3"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("d3f8f971-83b8-475b-b96b-73ad397d2a91"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("9a1f85f8-f606-4aac-8c55-8033f484916e"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("77cec88c-4dcc-4b25-8eeb-ae9c29abed25"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("4725dd10-29fc-4e5d-b38d-38f8946c1445"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("28feb17d-05bb-4d77-9298-2de9b6d91846"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("dc679c03-d4dd-4ea2-88eb-9ad2590ba414"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("c79a6018-2b7c-43b7-8c41-3bad1b9224ff"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("271c276c-83cb-4396-99a2-2a5570b90170"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("099158a0-81d8-4113-87d9-4f730e051a1a"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("2fb29065-264a-4275-b6ca-9a40fb876759"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("54836d03-cf47-4617-a9a7-41d354413346"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("4422b5a6-0790-4ba7-85e3-02e5db8984bf"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("c1f8f96a-6d8e-4b15-aa5f-c611495f4bc9"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("00443259-8179-4695-aa3d-e9f2f411c8b8"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("8f8a67fd-9056-46a2-bb6b-2d4f02318c10"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("c63530a4-35c6-4562-a2e9-8bd961d781ea"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("af674536-6a1f-480d-a7c2-7774546afead"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("897facc1-8657-4c7a-b927-ac6dc8d9ab86"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e209426b-d25b-445d-ab33-7e47e497fbdd"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("8fbb5a76-10b4-4ce4-8886-4246336bdb2a"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("fda34b2c-1ce5-405f-ab96-4750ad99ac44"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("668ff787-7b67-40e4-9bdd-03ecba8899d8"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("b009dd7c-4953-4919-9632-b3bac6cc1ff9"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("9e6e704a-bd87-4b52-90af-07258be0e04d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("015dcbc0-719e-44a3-80d9-49491352c659"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("2af5baf4-87cf-4bc6-ad75-d502b7ba4ee2"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("45fdb8eb-e4b3-41e1-9caa-7eb23a2cc28d"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("547807c9-b4c3-461e-9c8c-e426f2c3f096"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("004e4d01-d163-468f-9e2b-67198f6e9291"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("87c28758-9bab-43cd-87e0-71f923c16a44"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("053475d4-5238-4805-9857-4c8c0ed1153a"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("12e25983-cea4-48a7-9f7e-9a8891dcba97"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("dd177a42-6c2e-4885-9841-82644256651a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("25dcaf5b-e0b9-44e0-85f7-957da7798954"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("52bced75-d3df-43d3-bcad-612368fa018c"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("f5c2326a-d11e-4f47-9980-bb64859fd7d9"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("f98dcb5c-4529-4d24-b360-fe9c9c495b02"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("a1206d37-92e5-483e-bd23-30d4b30f6951"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("1f07524d-9abf-433d-a0ed-33e089ce2791"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("fa52d9c3-c7f5-450a-bab0-5d78222df447"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("bb1072b7-7cc9-4259-aba4-136961820fa4"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("0bf4405a-6b46-4da1-b730-57abacf02ce2"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("ca61ffc9-5f89-4ca1-9031-295bb987ad47"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("add6f03b-951f-45ff-bde6-8488bfa58bc7"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("d73c1333-adc1-47a1-9141-dccf13ba1a6a"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("22bc4a0b-0967-4847-a073-b1c2ef9d3c9c"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("0a8465b7-4ecb-4c34-b6a8-9de0dc0a73c5"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("bc5c1c6e-1808-4ea9-8431-56708457d26b"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("9d7f8a03-2d57-49fe-873d-8e3126da2c27"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("f360d8c2-e52f-4d44-8050-5b9b9cf0bb9e"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("21546512-4fb6-43fd-91ad-dd7b342d9922"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("301d5e01-b81f-492e-90c0-125a4c58ac10"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 400, - ApiKey = new Guid("d8999f67-cbee-46cc-9fda-2b3f049a8386"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("4ae77ba5-8564-4585-8611-d23d00888e60"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("90a55fa0-e340-42c1-bc2d-a84e8586739a"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("8aead14e-f328-4d30-9c8f-40109f2957a7"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("29f1118f-1d08-44df-a72d-f8fde49d45f5"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("8e380792-56d8-4355-90d1-49509d6491ff"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("755ad2a7-f096-4993-8ce7-de98a0d44490"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("3388b42f-51b3-4f6c-9ef8-8d73f1c83da0"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("3ef96876-59d7-4bfd-8e11-0c94ce25b0c4"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("bb1bb972-df84-4b51-b30f-6c0e84141bc7"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("d2e2836e-e1fb-400b-a64e-f2d5c45c9cbb"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("70e4e2d8-40dc-4dec-84e9-ed3b9f774fd8"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("ab9d2a8c-3abb-460f-810e-3ace5ef5bf36"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("0f75e577-cd92-4bc3-b09a-1a2248d259c8"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("3df92484-5cc9-4a90-a70f-6244714e7286"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("c83e8344-bd21-472d-8e19-153e810455fd"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("30dd9542-a329-4082-b81e-ae625c279ece"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1400, - ApiKey = new Guid("10ce7a47-0059-4c9d-bbde-3a5c725289c9"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("aad1ee27-017b-40cc-84db-4708869f9d87"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("93ee28f7-e23f-4cc1-a10f-ee48dd1fa1a4"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("13a18711-f791-4773-acfc-03fcaeffd4c8"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("3dffe787-4e27-4215-bccb-18dde5f6624e"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.cs b/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.cs deleted file mode 100644 index 11ac0fed4..000000000 --- a/src/Melodee.Common/Migrations/20250716170825_UpdateLibraryTypeConstraints.cs +++ /dev/null @@ -1,1425 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class UpdateLibraryTypeConstraints : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Libraries_Type", - table: "Libraries"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c812ffa0-1cec-4284-aa1e-71a46527758f"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a566bec-f5bf-40a6-afae-c0ae342e9c52"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1dd63cd8-1f62-441b-bfde-58f89559ac69"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca1b5183-2816-45a1-9c6f-e00c1727dcee"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8464bc2f-47eb-49c8-8e8d-39ff88c84a5a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75db42e1-f0fd-4295-a7db-6104656dd57c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("71c2bd5b-3069-4244-a313-790f739646b7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9287aaa6-0982-4fdf-8f68-7dc64c514abb"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80ced0bd-8ee1-417e-bbb7-a55b1699fb05"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0547b74-6be9-48ca-8a33-dcb91361c25a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("28feb17d-05bb-4d77-9298-2de9b6d91846"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc679c03-d4dd-4ea2-88eb-9ad2590ba414"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c79a6018-2b7c-43b7-8c41-3bad1b9224ff"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("271c276c-83cb-4396-99a2-2a5570b90170"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("099158a0-81d8-4113-87d9-4f730e051a1a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2fb29065-264a-4275-b6ca-9a40fb876759"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54836d03-cf47-4617-a9a7-41d354413346"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4422b5a6-0790-4ba7-85e3-02e5db8984bf"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1f8f96a-6d8e-4b15-aa5f-c611495f4bc9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00443259-8179-4695-aa3d-e9f2f411c8b8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f8a67fd-9056-46a2-bb6b-2d4f02318c10"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c63530a4-35c6-4562-a2e9-8bd961d781ea"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af674536-6a1f-480d-a7c2-7774546afead"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("897facc1-8657-4c7a-b927-ac6dc8d9ab86"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e209426b-d25b-445d-ab33-7e47e497fbdd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8fbb5a76-10b4-4ce4-8886-4246336bdb2a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fda34b2c-1ce5-405f-ab96-4750ad99ac44"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("668ff787-7b67-40e4-9bdd-03ecba8899d8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b009dd7c-4953-4919-9632-b3bac6cc1ff9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e6e704a-bd87-4b52-90af-07258be0e04d"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("52bced75-d3df-43d3-bcad-612368fa018c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5c2326a-d11e-4f47-9980-bb64859fd7d9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("87c28758-9bab-43cd-87e0-71f923c16a44"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("053475d4-5238-4805-9857-4c8c0ed1153a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt", "Value" }, - values: new object[] { new Guid("12e25983-cea4-48a7-9f7e-9a8891dcba97"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L), "1.0.1" }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd177a42-6c2e-4885-9841-82644256651a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25dcaf5b-e0b9-44e0-85f7-957da7798954"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e87aa59-4703-4a8f-94a4-d8b7c874a060"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91a66eca-2aea-4837-8b8e-87cda9594ca4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1fb3000-d26f-4872-b2a2-9654f0b85150"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0f0155b-ac6e-40ff-b8fd-e22d0d2a69ca"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25503f74-8750-4445-a023-971485537085"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bac12225-30ee-44a6-855b-c237314fa2e8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d8999f67-cbee-46cc-9fda-2b3f049a8386"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ae77ba5-8564-4585-8611-d23d00888e60"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("90a55fa0-e340-42c1-bc2d-a84e8586739a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8aead14e-f328-4d30-9c8f-40109f2957a7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("29f1118f-1d08-44df-a72d-f8fde49d45f5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e380792-56d8-4355-90d1-49509d6491ff"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("755ad2a7-f096-4993-8ce7-de98a0d44490"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("482b180e-811d-44d0-bce7-8fb2d581d9dd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04b1127e-a11b-48a9-a346-75a1cc694cb2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("358026a5-6c9d-46a3-b7be-27b96f62fe69"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ca2b3b2-7a27-46fe-8c6f-aee488aeea1f"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4b422f00-21f6-4369-82ad-001c7c58adba"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3b81fd0-42bb-41c3-af63-bdaf8341b7f2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("272d2704-9dcd-49b6-8f25-cd72f686d2a5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7e3c8ba3-0832-4dbe-b029-6d91273dba60"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a00773d-404e-4af9-ac46-f8b4bb56e1f3"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3f8f971-83b8-475b-b96b-73ad397d2a91"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9a1f85f8-f606-4aac-8c55-8033f484916e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("77cec88c-4dcc-4b25-8eeb-ae9c29abed25"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4725dd10-29fc-4e5d-b38d-38f8946c1445"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f98dcb5c-4529-4d24-b360-fe9c9c495b02"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1206d37-92e5-483e-bd23-30d4b30f6951"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f07524d-9abf-433d-a0ed-33e089ce2791"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fa52d9c3-c7f5-450a-bab0-5d78222df447"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb1072b7-7cc9-4259-aba4-136961820fa4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0bf4405a-6b46-4da1-b730-57abacf02ce2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca61ffc9-5f89-4ca1-9031-295bb987ad47"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("add6f03b-951f-45ff-bde6-8488bfa58bc7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d73c1333-adc1-47a1-9141-dccf13ba1a6a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22bc4a0b-0967-4847-a073-b1c2ef9d3c9c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a8465b7-4ecb-4c34-b6a8-9de0dc0a73c5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc5c1c6e-1808-4ea9-8431-56708457d26b"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d7f8a03-2d57-49fe-873d-8e3126da2c27"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f360d8c2-e52f-4d44-8050-5b9b9cf0bb9e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21546512-4fb6-43fd-91ad-dd7b342d9922"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("301d5e01-b81f-492e-90c0-125a4c58ac10"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70e4e2d8-40dc-4dec-84e9-ed3b9f774fd8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab9d2a8c-3abb-460f-810e-3ace5ef5bf36"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0f75e577-cd92-4bc3-b09a-1a2248d259c8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3df92484-5cc9-4a90-a70f-6244714e7286"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c83e8344-bd21-472d-8e19-153e810455fd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("30dd9542-a329-4082-b81e-ae625c279ece"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3388b42f-51b3-4f6c-9ef8-8d73f1c83da0"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ef96876-59d7-4bfd-8e11-0c94ce25b0c4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb1bb972-df84-4b51-b30f-6c0e84141bc7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2e2836e-e1fb-400b-a64e-f2d5c45c9cbb"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("015dcbc0-719e-44a3-80d9-49491352c659"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2af5baf4-87cf-4bc6-ad75-d502b7ba4ee2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("45fdb8eb-e4b3-41e1-9caa-7eb23a2cc28d"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("547807c9-b4c3-461e-9c8c-e426f2c3f096"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("004e4d01-d163-468f-9e2b-67198f6e9291"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("10ce7a47-0059-4c9d-bbde-3a5c725289c9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aad1ee27-017b-40cc-84db-4708869f9d87"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93ee28f7-e23f-4cc1-a10f-ee48dd1fa1a4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13a18711-f791-4773-acfc-03fcaeffd4c8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3dffe787-4e27-4215-bccb-18dde5f6624e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.CreateIndex( - name: "IX_Libraries_Type", - table: "Libraries", - column: "Type", - unique: true, - filter: "\"Type\" != 3"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Libraries_Type", - table: "Libraries"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("44175952-2a41-470e-b240-daa7fe6e1ee4"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("38270c51-5757-43a2-b422-cd8f92c10e27"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("65c4431f-fd58-4025-8bd7-0bb9b2f63594"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc3bb2ea-d4d3-4f87-81b1-d12b19a0a0dc"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("35f4ddec-6b04-48cd-97ee-01eaad888c13"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("64c097c9-09cb-485a-8624-a6d11dc4855d"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebb88fa0-ceca-4a37-b4a1-a46b1b8a8b47"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ce6340c-7ae1-46cc-818d-41838a962923"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("17cbcde8-960e-49ba-86c5-c75af2a48f1d"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("995ad789-9769-4c24-9d26-c389886febc1"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("64cf87a0-73b9-498a-85c5-529f1aaca254"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a08c0cc0-9fbd-495e-91f7-8328462abfb2"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9d0a19e-0f13-411a-b11a-c52903fef855"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5e09a8b3-c3d1-4131-8e9d-5f9edd167442"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e3b88163-ac5e-45ec-b78c-2240acb0e6db"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("275ed7d5-469f-4b0a-a941-63dd2ea31a56"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c4afe94-27e3-426a-ab2b-84e75bd6e017"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ffb01250-fe1d-4782-b3af-47df1722ae65"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d37a7af-0055-472d-abc5-9fcbb3529faf"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f2117f0c-28bc-4f04-ad3f-134dfd0f2e2f"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ea07ebf-c8ae-4a48-8d9b-d52b3306ce7a"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1f61689-a23b-4d44-9dca-67dd6af91d32"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4813611c-1181-47c4-9c18-31c9fcdd20b1"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("659111c9-9531-4e93-80d5-84a755221022"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aff77d81-adcc-46b9-9098-dd23c9f2088a"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7cbbe133-86db-49c4-acf8-d49b70085327"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cb1c71e2-b4ee-4691-ab06-d11b1ae8625c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("531edc76-5cec-473b-b6ac-497ddeac56be"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85bebf81-b731-43b6-a34d-167af14cf068"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91c58c3b-6add-4d6a-8527-759d8277e36f"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b453b989-4dc8-4b45-974d-89f555015c7f"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d6aa7ac-d1d5-421e-a9f1-8fe425e2dc13"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94d50c2c-60a6-4152-abe1-0c6f8639419e"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("950d265b-0c37-49dd-9c74-8d7b204bdba6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt", "Value" }, - values: new object[] { new Guid("31e970a9-f7ee-4486-9908-0f0fbd8252a8"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L), "1.0.1 (beta)" }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("213f96f6-3298-4204-943d-c5b836378f29"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70a39a75-1833-46b7-876a-9ebdcd161a12"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1b4193d-964d-459c-bb4e-cb0e04a9e97f"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5934d727-1900-4db0-b546-05cbc4c63031"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2555cc81-fcb1-46f9-8460-6505e570d484"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("368ae714-c11c-43f0-b093-a49a2fcfa293"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93ebc5bd-6bf4-4058-97f2-b72b8147ff4a"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5a61230-6b93-43a9-be44-88e8d1ade94b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b157344-a116-461e-8e5f-328d54827a0c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("23b946a1-6ff2-4b94-8acf-e0057c22bea5"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1d3cb28d-87a0-4f3a-99a1-0538b691d03c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ef75d81-ff39-4b4c-b668-7de947342f2c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b99a9b8-6931-4f60-9e54-013df13343a9"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bbfc072e-cc55-4844-956d-0f9fc9212912"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7470cfc7-cf31-454c-8749-8040d95c64ec"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("47da1d83-ad07-4d80-8456-0f064bc2a312"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa6a2329-4bb6-4f42-b14a-c42ef83f1a6a"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2f6013b-8d9a-4371-93ad-555e6743d3a9"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4dfaf8ef-a9fa-419d-b3c1-3d18ca4a85a9"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e8435e88-9ffc-4ee3-8949-c13ef1d4e10b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae367a88-3a6d-4c02-95e2-a2357be29938"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8890c36d-ef6c-45a8-9dc3-f497715e55fe"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2164252e-31fa-4bd4-a74a-56a5c900bfd6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5f11998-69e1-4093-be42-c2e9218ceedd"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("adb344c5-5218-47fe-9e3b-80fd7ae68d2b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("24113793-b7a0-4beb-b0a4-f73f255096c1"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("14ae9e78-5310-4159-805e-4f5877f2318c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eb336670-afa3-4d8f-af09-517be7e1f219"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c8f1e967-551b-4802-b447-05b1ed8fbc7d"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7944a8d-bf39-4dde-8516-faeff13a863e"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("10704115-83ae-42df-a542-0b0681e561e5"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e4da4d74-9cde-4cc8-ab91-b8fcbd48a311"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd3d46bf-0263-455f-8802-2d6534c18de6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("031d0356-6d25-491b-bdbd-c0cda92d0218"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fcb1315-bd40-4855-9564-12a01e9b859b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0065481e-7345-4a24-8ee3-5cbac7b2dda6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5cddd44f-f05c-453c-9ba6-fd870b80e08b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("591f11fb-2b15-4edd-b124-f95b1ca255f7"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a045afda-2756-4d60-aac6-6bed508e95c6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a6a4377-6934-4226-bc39-71716d8f61fc"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed6afb5e-e10c-4694-843a-3cdc9652240f"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cef48d57-3f40-4786-b4c2-23f4700df9bd"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("645e0474-7489-4661-99ec-6e3311fb6fae"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6efc0442-0d11-435e-b17c-9dd89a1006fa"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd0be6fe-2083-40d9-bbaf-f9069a4f5b99"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("12dfaa5a-159e-4dd2-b5fb-0bfcaf37ba98"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("224af850-3a00-4233-9e2d-a416f0fe054c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b7acfff-a83d-425a-bb8e-4a68e9a43518"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d60dd63d-823e-4654-90c2-1e34bada5f18"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4539c70c-35bd-47e9-84b1-ae13b4a5c6c6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1fcb0e11-5dc8-4647-9bab-beff57d2c60b"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b52d06cc-f23c-446a-b2c5-b2c8ca4a5e65"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7a9f11f-2cf5-45e0-ad1e-af067f0843cd"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2dceaa9-8f9d-4b15-a93e-9967f090a54c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7e69eceb-c6af-4a9a-8fa4-c3953597553c"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54aa6df0-7bdf-4261-90b7-65365f5285a3"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("394e001f-da2f-4786-bfe0-cacbef04628d"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1637458-78d8-4659-be7a-d8e3389aa4ef"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ac5da157-6a1d-496a-821c-3fe73e7557af"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("07b5481e-5e0f-4c41-af91-7cbb32a71d22"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d0883299-3971-4a9a-a673-aab98a8f404e"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70ba4874-fe8a-4802-a5f2-262d102c5d63"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a6a0fa5-8b0f-4120-b080-6d9d42086d93"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2c0c64b9-1d2e-497f-b2cd-8b96604290b6"), NodaTime.Instant.FromUnixTimeTicks(17457662807598984L) }); - - migrationBuilder.CreateIndex( - name: "IX_Libraries_Type", - table: "Libraries", - column: "Type", - unique: true); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.Designer.cs b/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.Designer.cs deleted file mode 100644 index de7999c4f..000000000 --- a/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.Designer.cs +++ /dev/null @@ -1,3310 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251214164346_AddUserTimeZoneId")] - partial class AddUserTimeZoneId - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("329a2843-242f-4f81-88bb-88137a708a53"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("60f98131-92e6-48ed-a5f6-d1983268963d"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("0a7c9c03-ab88-4507-84fb-76578554916a"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("54e396a1-9ae3-48d7-aebe-f7a12b337c92"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4660f54a-62f7-4465-8532-29bb2d348f72"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("f85f422a-f228-411d-afc5-9c7d81f6fafa"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("5b212eaf-6c07-4f75-b105-5a0cb90a6bda"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("a9617f71-6be8-46d1-959e-65c61c16649d"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("73621bc3-4888-4a4a-93f4-4c5f483488f8"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("ef7ff465-51b1-41de-983c-1d74c59b0135"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("bd2d30e9-8655-4fc7-8bf7-1332de1fcba1"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("b623c050-d2a1-43c4-ba81-6bb622955742"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("718e93c6-6725-40f3-a5ab-bc64d0935b6c"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("3bc68c67-b3dc-4f1a-ac4c-0b72d5045e5f"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("feb4de04-7c64-4d9e-8baa-eb6af704b388"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("137b9a5c-cb2c-49ae-bebe-417a299fed98"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("203accf0-7bb3-444f-ae46-5de15449d827"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("ec7b224a-e24a-483b-8fdb-3b17c4d8e58c"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("a12e8339-63f3-47b9-9516-54ec9b84db34"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("21d0a56a-0265-4f2e-b346-d18f5232cb6b"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("c21019fb-4430-4557-817f-13f73879ad64"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("a0607bff-ba19-4aa3-9368-3173480df7b0"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("6d47c052-761e-451c-bc11-77213e7e0a16"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("0be5d81d-891b-4ef0-b827-a1bd9bc31f71"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("7fe70b28-46d5-464c-9494-efbbdb9467d1"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("4a7da15c-3f2f-4adb-9fa2-a7b123c5d752"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("b891a388-d57c-449f-883c-1f6b608ee644"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("5dcfefde-a584-44fa-a0d3-d6108649553b"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("7bfa20a8-0629-44e4-ada5-db620be80ab4"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("fef3e9df-50e2-4738-b3b6-13e994a708af"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("25f34c8d-00d0-421a-b328-0b601a97102f"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("18b39fb5-737b-484b-9422-583f9704abc7"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("3782dfe9-a413-4aaa-8c62-aafa12a9e736"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("2be325ed-1ab9-46ca-8798-8775fe7b7a96"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("ee02f26b-ff12-4efb-a2b2-63fb252681ec"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("8dda43cb-9c3a-4d23-b682-de228bfd6b76"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("6f1ad238-fcd7-48fe-a753-9c10ea0562ea"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("873c9889-62eb-4c9f-8542-5f3c1df06a60"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("118442ac-2477-4632-a8de-3d86209c31d0"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("d4e9c6c6-cd76-45ab-8ff9-b05ef9912e55"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("ae0ce27b-16a8-4ffb-9827-b48cf7e5d90f"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("810c1d9d-8f27-47f0-bebf-42b9b317198a"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("0a6c88e2-2e9f-4d53-94db-452d983d4e3f"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("cc37d749-7112-4d8c-9654-ed1d2f24d89d"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("06099fae-ae67-4fb3-912c-6451de68bac2"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("05dc2a67-7769-43b9-a85e-f6225b757ed7"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("093bd246-f772-4cbb-a603-d885ccfb3f6b"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("4505af9e-4331-4b80-acca-c989feabee99"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("1db14117-8ae5-4940-b221-feda084a122a"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("89cfea23-966f-4bc3-a050-65e2556a342b"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("214790ae-256d-4a53-a1fd-fb1df6a52a65"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("4208dc43-8377-4365-a53a-e4648173c798"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("26bcdb98-7387-46ac-adf6-ea98a00a5033"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("0e6af31e-a65d-4b37-b913-19c0f551fffc"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("578bc175-9963-4e2f-bbd2-863667dc1810"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("0c1822ca-9cde-45ef-8996-31c20c932303"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("a8630463-5d75-4428-81b9-230537e81df9"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("04e051fe-bc77-43d6-8380-85b075a6da89"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("1ef8c62a-c244-4636-8ed0-2ed71bb97a69"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("2cb27bf9-1ff2-482e-8414-2b5a4886e770"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("13e61c6f-9b58-4610-9055-3c5730708585"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("5d60f8a2-044c-4bbc-891b-8d1c527981ba"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("5e5476e2-ba87-4eae-bfea-0488a990e665"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("6ec8de3d-3e87-4830-9569-5c51d49a8f37"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("bca90fcd-802e-4752-8528-fe7deded36e2"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("7f38dd40-388b-4a45-bd13-5e04894048bd"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("9d3d832f-da36-4b63-a8f1-b53316c69a35"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("0ab75812-a15d-4122-928b-38cd2c6337d6"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("9e36991b-150c-4ab4-9130-e44281450659"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("3b111339-270e-4d02-b5a9-bf12e1aa18c0"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("1b7fe3f1-6172-48f0-8b4d-1c80c99bdf3f"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("d18ff30d-1a92-46ef-b775-1628ce4cb99e"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("03198d98-9d45-45cc-b19b-2d60cf98099a"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("0892f9b0-9c4d-4e3b-a2a7-0e977c9b705e"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("aa98d256-fba4-42c8-bb0f-18bb9962bd58"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("ea345dda-b6d5-4880-8f39-9789c3e0a65f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("6cbe6296-fbde-492e-bd11-b3a51b832a25"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("889f8342-10d5-43de-aa69-484bbeb1795a"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("8393eb50-536f-468d-8096-fac84e0168e1"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("2ea454ba-abc5-4607-8e13-ae8c11429eca"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("9674b63c-d566-4fcb-b007-8bd2e7e27519"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("68b4fe9c-1a4f-4734-88e5-b567bf7f44ea"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("e2d6c01e-1ec3-461a-bb6c-e2ec1ab335c8"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("c6bf8e43-9e92-442b-aac3-c751b455cac2"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("18861bb0-1720-4183-97c1-7e2523840d88"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("61f39acf-7b49-4272-88b0-8be0beb89798"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("d5e8b1f8-6fdf-4b99-9dd5-7238bdab08d7"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("2ba49c76-abec-4ee7-a4dc-6d05dbc23391"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("80894815-6a60-4a0c-87f8-9e1cbbf973e9"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("33d078b1-b6bf-4d45-b3c6-ea131aa084b7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("f5e80d4a-6328-4c17-8ca5-6e6564255149"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("3f95e4c1-47ef-4c31-aea4-8d6116cd4fb6"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("02555f50-7059-4d99-9aa2-43ee15d2e833"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("bcdf407d-3f58-4014-a79b-19238da836b2"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("4b655453-132d-46b6-8b35-62d80a45158a"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("098ece85-1b94-49c2-a7be-b9b8a756e40b"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("59d5b859-9673-41ec-b91c-1d9d9db64572"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("c249bf62-301a-4651-bebb-2900deb1dfbc"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("949cd514-59dd-47d4-991f-dd0458e16ec4"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("aabdf76e-6fab-49f5-a8f1-8cbc8f96f7af"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("ff1a4174-4261-4b56-8211-39da92246785"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.cs b/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.cs deleted file mode 100644 index 0324cf2d6..000000000 --- a/src/Melodee.Common/Migrations/20251214164346_AddUserTimeZoneId.cs +++ /dev/null @@ -1,1437 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserTimeZoneId : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "TimeZoneId", - table: "Users", - type: "character varying(64)", - maxLength: 64, - nullable: false, - defaultValue: "UTC"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("329a2843-242f-4f81-88bb-88137a708a53"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("60f98131-92e6-48ed-a5f6-d1983268963d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a7c9c03-ab88-4507-84fb-76578554916a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54e396a1-9ae3-48d7-aebe-f7a12b337c92"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4660f54a-62f7-4465-8532-29bb2d348f72"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f85f422a-f228-411d-afc5-9c7d81f6fafa"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5b212eaf-6c07-4f75-b105-5a0cb90a6bda"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a9617f71-6be8-46d1-959e-65c61c16649d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("73621bc3-4888-4a4a-93f4-4c5f483488f8"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b623c050-d2a1-43c4-ba81-6bb622955742"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fef3e9df-50e2-4738-b3b6-13e994a708af"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25f34c8d-00d0-421a-b328-0b601a97102f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18b39fb5-737b-484b-9422-583f9704abc7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3782dfe9-a413-4aaa-8c62-aafa12a9e736"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2be325ed-1ab9-46ca-8798-8775fe7b7a96"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee02f26b-ff12-4efb-a2b2-63fb252681ec"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8dda43cb-9c3a-4d23-b682-de228bfd6b76"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6f1ad238-fcd7-48fe-a753-9c10ea0562ea"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("873c9889-62eb-4c9f-8542-5f3c1df06a60"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("118442ac-2477-4632-a8de-3d86209c31d0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d4e9c6c6-cd76-45ab-8ff9-b05ef9912e55"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae0ce27b-16a8-4ffb-9827-b48cf7e5d90f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("810c1d9d-8f27-47f0-bebf-42b9b317198a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a6c88e2-2e9f-4d53-94db-452d983d4e3f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc37d749-7112-4d8c-9654-ed1d2f24d89d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06099fae-ae67-4fb3-912c-6451de68bac2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05dc2a67-7769-43b9-a85e-f6225b757ed7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("093bd246-f772-4cbb-a603-d885ccfb3f6b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4505af9e-4331-4b80-acca-c989feabee99"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1db14117-8ae5-4940-b221-feda084a122a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2cb27bf9-1ff2-482e-8414-2b5a4886e770"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13e61c6f-9b58-4610-9055-3c5730708585"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("578bc175-9963-4e2f-bbd2-863667dc1810"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c1822ca-9cde-45ef-8996-31c20c932303"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a8630463-5d75-4428-81b9-230537e81df9"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04e051fe-bc77-43d6-8380-85b075a6da89"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ef8c62a-c244-4636-8ed0-2ed71bb97a69"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c21019fb-4430-4557-817f-13f73879ad64"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0607bff-ba19-4aa3-9368-3173480df7b0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d47c052-761e-451c-bc11-77213e7e0a16"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0be5d81d-891b-4ef0-b827-a1bd9bc31f71"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ef7ff465-51b1-41de-983c-1d74c59b0135"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd2d30e9-8655-4fc7-8bf7-1332de1fcba1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8393eb50-536f-468d-8096-fac84e0168e1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ea454ba-abc5-4607-8e13-ae8c11429eca"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9674b63c-d566-4fcb-b007-8bd2e7e27519"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b4fe9c-1a4f-4734-88e5-b567bf7f44ea"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e2d6c01e-1ec3-461a-bb6c-e2ec1ab335c8"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6bf8e43-9e92-442b-aac3-c751b455cac2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18861bb0-1720-4183-97c1-7e2523840d88"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("718e93c6-6725-40f3-a5ab-bc64d0935b6c"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3bc68c67-b3dc-4f1a-ac4c-0b72d5045e5f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("feb4de04-7c64-4d9e-8baa-eb6af704b388"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("137b9a5c-cb2c-49ae-bebe-417a299fed98"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("203accf0-7bb3-444f-ae46-5de15449d827"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec7b224a-e24a-483b-8fdb-3b17c4d8e58c"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a12e8339-63f3-47b9-9516-54ec9b84db34"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21d0a56a-0265-4f2e-b346-d18f5232cb6b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fe70b28-46d5-464c-9494-efbbdb9467d1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a7da15c-3f2f-4adb-9fa2-a7b123c5d752"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b891a388-d57c-449f-883c-1f6b608ee644"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5dcfefde-a584-44fa-a0d3-d6108649553b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7bfa20a8-0629-44e4-ada5-db620be80ab4"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d60f8a2-044c-4bbc-891b-8d1c527981ba"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5e5476e2-ba87-4eae-bfea-0488a990e665"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ec8de3d-3e87-4830-9569-5c51d49a8f37"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bca90fcd-802e-4752-8528-fe7deded36e2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7f38dd40-388b-4a45-bd13-5e04894048bd"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d3d832f-da36-4b63-a8f1-b53316c69a35"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ab75812-a15d-4122-928b-38cd2c6337d6"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e36991b-150c-4ab4-9130-e44281450659"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b111339-270e-4d02-b5a9-bf12e1aa18c0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b7fe3f1-6172-48f0-8b4d-1c80c99bdf3f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d18ff30d-1a92-46ef-b775-1628ce4cb99e"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03198d98-9d45-45cc-b19b-2d60cf98099a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0892f9b0-9c4d-4e3b-a2a7-0e977c9b705e"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa98d256-fba4-42c8-bb0f-18bb9962bd58"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea345dda-b6d5-4880-8f39-9789c3e0a65f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cbe6296-fbde-492e-bd11-b3a51b832a25"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33d078b1-b6bf-4d45-b3c6-ea131aa084b7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5e80d4a-6328-4c17-8ca5-6e6564255149"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f95e4c1-47ef-4c31-aea4-8d6116cd4fb6"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("02555f50-7059-4d99-9aa2-43ee15d2e833"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcdf407d-3f58-4014-a79b-19238da836b2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4b655453-132d-46b6-8b35-62d80a45158a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61f39acf-7b49-4272-88b0-8be0beb89798"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5e8b1f8-6fdf-4b99-9dd5-7238bdab08d7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ba49c76-abec-4ee7-a4dc-6d05dbc23391"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80894815-6a60-4a0c-87f8-9e1cbbf973e9"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("89cfea23-966f-4bc3-a050-65e2556a342b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("214790ae-256d-4a53-a1fd-fb1df6a52a65"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4208dc43-8377-4365-a53a-e4648173c798"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("26bcdb98-7387-46ac-adf6-ea98a00a5033"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e6af31e-a65d-4b37-b913-19c0f551fffc"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59d5b859-9673-41ec-b91c-1d9d9db64572"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c249bf62-301a-4651-bebb-2900deb1dfbc"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("949cd514-59dd-47d4-991f-dd0458e16ec4"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aabdf76e-6fab-49f5-a8f1-8cbc8f96f7af"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff1a4174-4261-4b56-8211-39da92246785"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 919, new Guid("889f8342-10d5-43de-aa69-484bbeb1795a"), 9, "Is Metal API search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), null, false, "searchEngine.metalApi.enabled", null, null, 0, null, "false" }, - { 1102, new Guid("098ece85-1b94-49c2-a7be-b9b8a756e40b"), 11, "Maximum upload size in bytes for UI uploads.", NodaTime.Instant.FromUnixTimeTicks(17657306259226320L), null, false, "system.maxUploadSize", null, null, 0, null, "5242880" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 919); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102); - - migrationBuilder.DropColumn( - name: "TimeZoneId", - table: "Users"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c812ffa0-1cec-4284-aa1e-71a46527758f"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a566bec-f5bf-40a6-afae-c0ae342e9c52"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1dd63cd8-1f62-441b-bfde-58f89559ac69"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca1b5183-2816-45a1-9c6f-e00c1727dcee"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8464bc2f-47eb-49c8-8e8d-39ff88c84a5a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75db42e1-f0fd-4295-a7db-6104656dd57c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("71c2bd5b-3069-4244-a313-790f739646b7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9287aaa6-0982-4fdf-8f68-7dc64c514abb"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80ced0bd-8ee1-417e-bbb7-a55b1699fb05"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0547b74-6be9-48ca-8a33-dcb91361c25a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("28feb17d-05bb-4d77-9298-2de9b6d91846"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc679c03-d4dd-4ea2-88eb-9ad2590ba414"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c79a6018-2b7c-43b7-8c41-3bad1b9224ff"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("271c276c-83cb-4396-99a2-2a5570b90170"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("099158a0-81d8-4113-87d9-4f730e051a1a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2fb29065-264a-4275-b6ca-9a40fb876759"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54836d03-cf47-4617-a9a7-41d354413346"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4422b5a6-0790-4ba7-85e3-02e5db8984bf"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1f8f96a-6d8e-4b15-aa5f-c611495f4bc9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("00443259-8179-4695-aa3d-e9f2f411c8b8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f8a67fd-9056-46a2-bb6b-2d4f02318c10"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c63530a4-35c6-4562-a2e9-8bd961d781ea"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af674536-6a1f-480d-a7c2-7774546afead"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("897facc1-8657-4c7a-b927-ac6dc8d9ab86"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e209426b-d25b-445d-ab33-7e47e497fbdd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8fbb5a76-10b4-4ce4-8886-4246336bdb2a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fda34b2c-1ce5-405f-ab96-4750ad99ac44"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("668ff787-7b67-40e4-9bdd-03ecba8899d8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b009dd7c-4953-4919-9632-b3bac6cc1ff9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e6e704a-bd87-4b52-90af-07258be0e04d"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("52bced75-d3df-43d3-bcad-612368fa018c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5c2326a-d11e-4f47-9980-bb64859fd7d9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("87c28758-9bab-43cd-87e0-71f923c16a44"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("053475d4-5238-4805-9857-4c8c0ed1153a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("12e25983-cea4-48a7-9f7e-9a8891dcba97"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd177a42-6c2e-4885-9841-82644256651a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25dcaf5b-e0b9-44e0-85f7-957da7798954"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e87aa59-4703-4a8f-94a4-d8b7c874a060"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91a66eca-2aea-4837-8b8e-87cda9594ca4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1fb3000-d26f-4872-b2a2-9654f0b85150"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0f0155b-ac6e-40ff-b8fd-e22d0d2a69ca"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25503f74-8750-4445-a023-971485537085"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bac12225-30ee-44a6-855b-c237314fa2e8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d8999f67-cbee-46cc-9fda-2b3f049a8386"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ae77ba5-8564-4585-8611-d23d00888e60"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("90a55fa0-e340-42c1-bc2d-a84e8586739a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8aead14e-f328-4d30-9c8f-40109f2957a7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("29f1118f-1d08-44df-a72d-f8fde49d45f5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e380792-56d8-4355-90d1-49509d6491ff"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("755ad2a7-f096-4993-8ce7-de98a0d44490"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("482b180e-811d-44d0-bce7-8fb2d581d9dd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04b1127e-a11b-48a9-a346-75a1cc694cb2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("358026a5-6c9d-46a3-b7be-27b96f62fe69"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ca2b3b2-7a27-46fe-8c6f-aee488aeea1f"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4b422f00-21f6-4369-82ad-001c7c58adba"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3b81fd0-42bb-41c3-af63-bdaf8341b7f2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("272d2704-9dcd-49b6-8f25-cd72f686d2a5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7e3c8ba3-0832-4dbe-b029-6d91273dba60"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a00773d-404e-4af9-ac46-f8b4bb56e1f3"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3f8f971-83b8-475b-b96b-73ad397d2a91"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9a1f85f8-f606-4aac-8c55-8033f484916e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("77cec88c-4dcc-4b25-8eeb-ae9c29abed25"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4725dd10-29fc-4e5d-b38d-38f8946c1445"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f98dcb5c-4529-4d24-b360-fe9c9c495b02"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1206d37-92e5-483e-bd23-30d4b30f6951"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f07524d-9abf-433d-a0ed-33e089ce2791"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fa52d9c3-c7f5-450a-bab0-5d78222df447"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb1072b7-7cc9-4259-aba4-136961820fa4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0bf4405a-6b46-4da1-b730-57abacf02ce2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca61ffc9-5f89-4ca1-9031-295bb987ad47"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("add6f03b-951f-45ff-bde6-8488bfa58bc7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d73c1333-adc1-47a1-9141-dccf13ba1a6a"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22bc4a0b-0967-4847-a073-b1c2ef9d3c9c"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a8465b7-4ecb-4c34-b6a8-9de0dc0a73c5"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc5c1c6e-1808-4ea9-8431-56708457d26b"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d7f8a03-2d57-49fe-873d-8e3126da2c27"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f360d8c2-e52f-4d44-8050-5b9b9cf0bb9e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21546512-4fb6-43fd-91ad-dd7b342d9922"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("301d5e01-b81f-492e-90c0-125a4c58ac10"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70e4e2d8-40dc-4dec-84e9-ed3b9f774fd8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab9d2a8c-3abb-460f-810e-3ace5ef5bf36"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0f75e577-cd92-4bc3-b09a-1a2248d259c8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3df92484-5cc9-4a90-a70f-6244714e7286"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c83e8344-bd21-472d-8e19-153e810455fd"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("30dd9542-a329-4082-b81e-ae625c279ece"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3388b42f-51b3-4f6c-9ef8-8d73f1c83da0"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ef96876-59d7-4bfd-8e11-0c94ce25b0c4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb1bb972-df84-4b51-b30f-6c0e84141bc7"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2e2836e-e1fb-400b-a64e-f2d5c45c9cbb"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("015dcbc0-719e-44a3-80d9-49491352c659"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2af5baf4-87cf-4bc6-ad75-d502b7ba4ee2"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("45fdb8eb-e4b3-41e1-9caa-7eb23a2cc28d"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("547807c9-b4c3-461e-9c8c-e426f2c3f096"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("004e4d01-d163-468f-9e2b-67198f6e9291"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("10ce7a47-0059-4c9d-bbde-3a5c725289c9"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aad1ee27-017b-40cc-84db-4708869f9d87"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93ee28f7-e23f-4cc1-a10f-ee48dd1fa1a4"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13a18711-f791-4773-acfc-03fcaeffd4c8"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3dffe787-4e27-4215-bccb-18dde5f6624e"), NodaTime.Instant.FromUnixTimeTicks(17526857043438029L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.Designer.cs b/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.Designer.cs deleted file mode 100644 index b6c5bcd30..000000000 --- a/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.Designer.cs +++ /dev/null @@ -1,3376 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251214172655_AddUserSongPlayHistory")] - partial class AddUserSongPlayHistory - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("e43e1f96-d164-430d-8729-9cb1f94ad26d"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("2e1e79e1-7530-45bc-8a26-ac71ae4c62f0"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("2afc297c-5f17-4c69-91b4-261c6b08485f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("af93096e-9798-4467-a8bb-53b915a57542"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("7ea06c4a-6110-4d35-bb37-b348f568d15b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("3e5b73c5-dc94-4c2f-8937-a17b0217f394"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("a177ab19-c88d-4c38-a525-6e24d7556249"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("171c5d1f-8cd7-4898-8b3b-dd155fcbf53c"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("88d5a545-7a27-40cf-be0f-cb81b4ab16f5"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("8009b84d-4145-483b-b1cd-fa7715dc33c3"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("761e5d2a-40db-4806-8983-19d38cb6b9cf"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("e2ee2b12-5925-4360-8f54-f2c66f703a07"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("e587d3be-38a4-42fc-845f-52cd5a9b41ea"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("495304a2-41bf-48c0-a564-77515144b4d7"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("33d6a011-69cf-4f17-947e-79c2b394ef81"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("5feea9ab-e025-4aa4-b96e-3195379f3bd5"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("d873a075-7f01-411b-9004-32ffabb03084"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("0b69ae13-a59e-4855-82be-39b9b2069385"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("4c46d322-3eea-4b9d-99fc-09090ff2d111"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("a0da1ffb-9a91-4d67-a14f-b6203f71b9fe"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("50aa22eb-b428-431d-990b-6e8028752b25"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("7ede8008-fa33-42fe-ade8-8d9c8ae86443"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("f7501577-6eb6-4043-8610-6f48e9f3bd5f"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("4537847b-3841-4c4c-8213-6cbc703bb7a0"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("9d978a43-f74a-4368-a4e5-f3edbca9ea9f"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("587cb39b-b707-42df-949f-d58b77d07ded"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("06fe43bf-9116-4113-b55d-e2ff634384a2"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("7d67277b-57e9-4058-b334-90a26d4ccc20"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("23b7a3ca-4ffa-4040-a96d-154c94909d5e"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("fc7a6f03-cb7d-442a-b496-10ea9ea85b45"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("5ba05533-9e9c-4e7a-a187-2642f5438b9e"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("e553eb2b-bef9-4fca-9b52-53c4d57a3edc"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("b40e5c83-7cb1-4f8b-8c46-4fcf7fc7539a"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("e7b71773-bb0d-4add-b5f9-dbdc1455688e"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("3f1b8d89-d99b-472e-b5ba-50883cbf7272"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("3f118f05-fd57-4d26-b231-e043e124c230"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("8f776d5a-69f0-4fee-8814-f0e39e69e2b0"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("6cf43baf-b724-4de7-b8b9-60617fcf8906"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("0a421a1f-22bc-4481-8712-18b569893469"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("27ec9b29-107f-4a76-9f4f-97cebfb5aa00"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("aa6bb8c9-d6e3-42d4-9efb-cbb16c2a755a"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("53bb8439-66d1-432b-bc9e-3e43b37a5066"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("db41019e-89d8-4656-bde7-4ebc93fbb490"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e0062797-1222-494a-95b3-619b8666fea7"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("7a4f8aed-330b-4367-8582-03a3d0a63d36"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("ebb26a3d-1306-4fab-9da9-6ced3181f074"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("59220e3a-aeaf-495f-a05e-1867d9bfbee1"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("7329f19b-b8d5-4a01-941f-4d9cde4f5949"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("a73cc166-6d15-4fcf-b7e3-832d8c0c5b33"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("b962205c-cb6f-4e70-a71a-32e739c634ce"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("1b681217-291b-42b8-939e-b8114fbbd4c9"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("768dc3f8-1be8-4a2e-a108-0d64ef59a6df"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("1c30aba4-7ac8-4a7a-9fc2-03699daf2dbf"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("4566e3f5-9750-49d0-8a38-1678386595ae"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("ce605a2f-062f-4b94-8533-3cf506b25d20"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("071cb421-b259-427c-9e0f-1f71f4180813"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("ee6fb689-952f-45cc-aec3-900375125e90"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("1904f25b-fe4c-4d3b-b697-77e791682cfc"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("c0ad12ae-7b7f-4a2d-b288-20dba05bfc38"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("a76498c4-d21f-4447-b37d-4863736f1fe3"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("673d057f-b766-4e17-8b10-9e759555dc58"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("c4bfff23-9925-40d2-b85b-4553025585af"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("7b9992bc-aa05-454b-b441-aacfd8e4b5cf"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("7fed1fb6-956a-44de-bc00-262bbe1dbfd6"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("b9acba9f-712d-4813-8b03-b13a8ebe3d65"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("313583a6-12db-474a-96d1-7588aaf59bfa"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("5671eab4-fceb-4bba-a810-858f914fba06"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("c0c59982-0596-4ea8-9cc6-c55fe2fc4c13"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("78c56522-f242-4f53-9140-c20c3b0b4aa5"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("25e56255-f33e-4852-8bd5-8bf725f92613"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("414b40fa-7f9a-4a7c-9b60-2d2366443209"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("36aef1e7-d582-49ac-9695-bc52bbabf1f6"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("765d6352-e047-46ab-9c6f-1b2174f4ab0e"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("961b982b-bc70-45dc-8e3e-bd02af2b1c3f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("a4d7865d-4e3d-4bc1-9a59-6df55671a5b2"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("ab3badeb-4fe7-4423-9bdf-7d1bcb859f2a"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("3ce72612-2d07-4ad3-abf3-de21104338d6"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("b2ffc4fa-9d50-422b-a013-1e9e5c40c775"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("7b4982eb-626e-4266-b19d-d48df7677a50"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("a5f999c1-4be8-4d51-9e7d-0d8955939116"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6f78a321-4587-49bf-a1fc-fcf799ec89e5"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("b7ff065a-763d-4cb7-85da-372c082e59b5"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("ff71bfa5-a58a-4b81-99a4-4ec553685301"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("b025525c-0d03-4ba2-a390-017837cadb63"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("f0949d3d-9f32-4aa6-acf7-d9a5a08150e3"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("33540ef5-4c6f-45ff-a609-b88176444939"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("6d7befc5-1ddc-46cd-9179-473e878f0214"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("a3688434-ff86-4e7f-adcd-2726a8b6eae1"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("1fcd6b0e-57e1-4e12-ba0d-c893673bbb24"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("896580d5-8f5f-4752-8061-a1972791aa25"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("4d30291e-6e30-4d85-b4f5-2a44e83938b7"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("234fc299-a213-4d86-9fb3-4b9111d552ba"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("859ad9eb-4e24-47e8-8aac-4b3a4b7a1353"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("adc1b117-14e7-40e3-89da-55e722a859b5"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("36080c24-5efa-4b7b-81f8-69ce051d0898"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("4a2a226c-5ab4-47bb-b312-f6a7e0eef11f"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("1a9bc93f-07ea-4094-a8f4-ad9014d591e6"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("dfc139de-a210-4586-9fd7-7f071925a457"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("d8187958-cb42-4bd2-8956-d9b013920eef"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("ec1f3235-d19c-4741-859d-c8e6de9a2ee1"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("cd167563-cca5-44c6-9ec0-950754a5b5bd"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17657332146305413L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.cs b/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.cs deleted file mode 100644 index 8abcabc8c..000000000 --- a/src/Melodee.Common/Migrations/20251214172655_AddUserSongPlayHistory.cs +++ /dev/null @@ -1,1484 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserSongPlayHistory : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "UserSongPlayHistories", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: false), - PlayedAt = table.Column(type: "timestamp with time zone", nullable: false), - Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ByUserAgent = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - SecondsPlayed = table.Column(type: "integer", nullable: true), - Source = table.Column(type: "smallint", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_UserSongPlayHistories", x => x.Id); - table.ForeignKey( - name: "FK_UserSongPlayHistories_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserSongPlayHistories_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e43e1f96-d164-430d-8729-9cb1f94ad26d"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e1e79e1-7530-45bc-8a26-ac71ae4c62f0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2afc297c-5f17-4c69-91b4-261c6b08485f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af93096e-9798-4467-a8bb-53b915a57542"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ea06c4a-6110-4d35-bb37-b348f568d15b"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e5b73c5-dc94-4c2f-8937-a17b0217f394"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a177ab19-c88d-4c38-a525-6e24d7556249"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("171c5d1f-8cd7-4898-8b3b-dd155fcbf53c"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("88d5a545-7a27-40cf-be0f-cb81b4ab16f5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e2ee2b12-5925-4360-8f54-f2c66f703a07"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fc7a6f03-cb7d-442a-b496-10ea9ea85b45"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5ba05533-9e9c-4e7a-a187-2642f5438b9e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e553eb2b-bef9-4fca-9b52-53c4d57a3edc"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b40e5c83-7cb1-4f8b-8c46-4fcf7fc7539a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7b71773-bb0d-4add-b5f9-dbdc1455688e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f1b8d89-d99b-472e-b5ba-50883cbf7272"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f118f05-fd57-4d26-b231-e043e124c230"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f776d5a-69f0-4fee-8814-f0e39e69e2b0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cf43baf-b724-4de7-b8b9-60617fcf8906"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a421a1f-22bc-4481-8712-18b569893469"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("27ec9b29-107f-4a76-9f4f-97cebfb5aa00"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa6bb8c9-d6e3-42d4-9efb-cbb16c2a755a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53bb8439-66d1-432b-bc9e-3e43b37a5066"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("db41019e-89d8-4656-bde7-4ebc93fbb490"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0062797-1222-494a-95b3-619b8666fea7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7a4f8aed-330b-4367-8582-03a3d0a63d36"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebb26a3d-1306-4fab-9da9-6ced3181f074"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59220e3a-aeaf-495f-a05e-1867d9bfbee1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7329f19b-b8d5-4a01-941f-4d9cde4f5949"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a73cc166-6d15-4fcf-b7e3-832d8c0c5b33"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a76498c4-d21f-4447-b37d-4863736f1fe3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("673d057f-b766-4e17-8b10-9e759555dc58"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce605a2f-062f-4b94-8533-3cf506b25d20"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("071cb421-b259-427c-9e0f-1f71f4180813"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee6fb689-952f-45cc-aec3-900375125e90"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1904f25b-fe4c-4d3b-b697-77e791682cfc"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0ad12ae-7b7f-4a2d-b288-20dba05bfc38"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("50aa22eb-b428-431d-990b-6e8028752b25"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ede8008-fa33-42fe-ade8-8d9c8ae86443"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f7501577-6eb6-4043-8610-6f48e9f3bd5f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4537847b-3841-4c4c-8213-6cbc703bb7a0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8009b84d-4145-483b-b1cd-fa7715dc33c3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("761e5d2a-40db-4806-8983-19d38cb6b9cf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7b4982eb-626e-4266-b19d-d48df7677a50"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5f999c1-4be8-4d51-9e7d-0d8955939116"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6f78a321-4587-49bf-a1fc-fcf799ec89e5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7ff065a-763d-4cb7-85da-372c082e59b5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff71bfa5-a58a-4b81-99a4-4ec553685301"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b025525c-0d03-4ba2-a390-017837cadb63"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0949d3d-9f32-4aa6-acf7-d9a5a08150e3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e587d3be-38a4-42fc-845f-52cd5a9b41ea"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("495304a2-41bf-48c0-a564-77515144b4d7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33d6a011-69cf-4f17-947e-79c2b394ef81"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5feea9ab-e025-4aa4-b96e-3195379f3bd5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d873a075-7f01-411b-9004-32ffabb03084"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b69ae13-a59e-4855-82be-39b9b2069385"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4c46d322-3eea-4b9d-99fc-09090ff2d111"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0da1ffb-9a91-4d67-a14f-b6203f71b9fe"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d978a43-f74a-4368-a4e5-f3edbca9ea9f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("587cb39b-b707-42df-949f-d58b77d07ded"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06fe43bf-9116-4113-b55d-e2ff634384a2"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d67277b-57e9-4058-b334-90a26d4ccc20"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("23b7a3ca-4ffa-4040-a96d-154c94909d5e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4bfff23-9925-40d2-b85b-4553025585af"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7b9992bc-aa05-454b-b441-aacfd8e4b5cf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fed1fb6-956a-44de-bc00-262bbe1dbfd6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9acba9f-712d-4813-8b03-b13a8ebe3d65"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("313583a6-12db-474a-96d1-7588aaf59bfa"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5671eab4-fceb-4bba-a810-858f914fba06"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0c59982-0596-4ea8-9cc6-c55fe2fc4c13"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78c56522-f242-4f53-9140-c20c3b0b4aa5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25e56255-f33e-4852-8bd5-8bf725f92613"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("414b40fa-7f9a-4a7c-9b60-2d2366443209"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36aef1e7-d582-49ac-9695-bc52bbabf1f6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("765d6352-e047-46ab-9c6f-1b2174f4ab0e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("961b982b-bc70-45dc-8e3e-bd02af2b1c3f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4d7865d-4e3d-4bc1-9a59-6df55671a5b2"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab3badeb-4fe7-4423-9bdf-7d1bcb859f2a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ce72612-2d07-4ad3-abf3-de21104338d6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b2ffc4fa-9d50-422b-a013-1e9e5c40c775"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("896580d5-8f5f-4752-8061-a1972791aa25"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d30291e-6e30-4d85-b4f5-2a44e83938b7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("234fc299-a213-4d86-9fb3-4b9111d552ba"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("859ad9eb-4e24-47e8-8aac-4b3a4b7a1353"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("adc1b117-14e7-40e3-89da-55e722a859b5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36080c24-5efa-4b7b-81f8-69ce051d0898"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a2a226c-5ab4-47bb-b312-f6a7e0eef11f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33540ef5-4c6f-45ff-a609-b88176444939"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d7befc5-1ddc-46cd-9179-473e878f0214"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a3688434-ff86-4e7f-adcd-2726a8b6eae1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1fcd6b0e-57e1-4e12-ba0d-c893673bbb24"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b962205c-cb6f-4e70-a71a-32e739c634ce"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b681217-291b-42b8-939e-b8114fbbd4c9"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("768dc3f8-1be8-4a2e-a108-0d64ef59a6df"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c30aba4-7ac8-4a7a-9fc2-03699daf2dbf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4566e3f5-9750-49d0-8a38-1678386595ae"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a9bc93f-07ea-4094-a8f4-ad9014d591e6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dfc139de-a210-4586-9fd7-7f071925a457"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d8187958-cb42-4bd2-8956-d9b013920eef"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec1f3235-d19c-4741-859d-c8e6de9a2ee1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cd167563-cca5-44c6-9ec0-950754a5b5bd"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.CreateIndex( - name: "IX_UserSongPlayHistories_PlayedAt", - table: "UserSongPlayHistories", - column: "PlayedAt"); - - migrationBuilder.CreateIndex( - name: "IX_UserSongPlayHistories_SongId_PlayedAt", - table: "UserSongPlayHistories", - columns: new[] { "SongId", "PlayedAt" }); - - migrationBuilder.CreateIndex( - name: "IX_UserSongPlayHistories_UserId_PlayedAt", - table: "UserSongPlayHistories", - columns: new[] { "UserId", "PlayedAt" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "UserSongPlayHistories"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("329a2843-242f-4f81-88bb-88137a708a53"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("60f98131-92e6-48ed-a5f6-d1983268963d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a7c9c03-ab88-4507-84fb-76578554916a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54e396a1-9ae3-48d7-aebe-f7a12b337c92"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4660f54a-62f7-4465-8532-29bb2d348f72"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f85f422a-f228-411d-afc5-9c7d81f6fafa"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5b212eaf-6c07-4f75-b105-5a0cb90a6bda"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a9617f71-6be8-46d1-959e-65c61c16649d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("73621bc3-4888-4a4a-93f4-4c5f483488f8"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b623c050-d2a1-43c4-ba81-6bb622955742"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fef3e9df-50e2-4738-b3b6-13e994a708af"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25f34c8d-00d0-421a-b328-0b601a97102f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18b39fb5-737b-484b-9422-583f9704abc7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3782dfe9-a413-4aaa-8c62-aafa12a9e736"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2be325ed-1ab9-46ca-8798-8775fe7b7a96"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee02f26b-ff12-4efb-a2b2-63fb252681ec"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8dda43cb-9c3a-4d23-b682-de228bfd6b76"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6f1ad238-fcd7-48fe-a753-9c10ea0562ea"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("873c9889-62eb-4c9f-8542-5f3c1df06a60"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("118442ac-2477-4632-a8de-3d86209c31d0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d4e9c6c6-cd76-45ab-8ff9-b05ef9912e55"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae0ce27b-16a8-4ffb-9827-b48cf7e5d90f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("810c1d9d-8f27-47f0-bebf-42b9b317198a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a6c88e2-2e9f-4d53-94db-452d983d4e3f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc37d749-7112-4d8c-9654-ed1d2f24d89d"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06099fae-ae67-4fb3-912c-6451de68bac2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05dc2a67-7769-43b9-a85e-f6225b757ed7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("093bd246-f772-4cbb-a603-d885ccfb3f6b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4505af9e-4331-4b80-acca-c989feabee99"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1db14117-8ae5-4940-b221-feda084a122a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2cb27bf9-1ff2-482e-8414-2b5a4886e770"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13e61c6f-9b58-4610-9055-3c5730708585"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("578bc175-9963-4e2f-bbd2-863667dc1810"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c1822ca-9cde-45ef-8996-31c20c932303"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a8630463-5d75-4428-81b9-230537e81df9"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04e051fe-bc77-43d6-8380-85b075a6da89"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ef8c62a-c244-4636-8ed0-2ed71bb97a69"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c21019fb-4430-4557-817f-13f73879ad64"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0607bff-ba19-4aa3-9368-3173480df7b0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d47c052-761e-451c-bc11-77213e7e0a16"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0be5d81d-891b-4ef0-b827-a1bd9bc31f71"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ef7ff465-51b1-41de-983c-1d74c59b0135"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd2d30e9-8655-4fc7-8bf7-1332de1fcba1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8393eb50-536f-468d-8096-fac84e0168e1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ea454ba-abc5-4607-8e13-ae8c11429eca"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9674b63c-d566-4fcb-b007-8bd2e7e27519"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b4fe9c-1a4f-4734-88e5-b567bf7f44ea"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e2d6c01e-1ec3-461a-bb6c-e2ec1ab335c8"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6bf8e43-9e92-442b-aac3-c751b455cac2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18861bb0-1720-4183-97c1-7e2523840d88"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("718e93c6-6725-40f3-a5ab-bc64d0935b6c"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3bc68c67-b3dc-4f1a-ac4c-0b72d5045e5f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("feb4de04-7c64-4d9e-8baa-eb6af704b388"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("137b9a5c-cb2c-49ae-bebe-417a299fed98"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("203accf0-7bb3-444f-ae46-5de15449d827"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec7b224a-e24a-483b-8fdb-3b17c4d8e58c"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a12e8339-63f3-47b9-9516-54ec9b84db34"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21d0a56a-0265-4f2e-b346-d18f5232cb6b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fe70b28-46d5-464c-9494-efbbdb9467d1"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a7da15c-3f2f-4adb-9fa2-a7b123c5d752"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b891a388-d57c-449f-883c-1f6b608ee644"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5dcfefde-a584-44fa-a0d3-d6108649553b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7bfa20a8-0629-44e4-ada5-db620be80ab4"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d60f8a2-044c-4bbc-891b-8d1c527981ba"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5e5476e2-ba87-4eae-bfea-0488a990e665"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ec8de3d-3e87-4830-9569-5c51d49a8f37"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bca90fcd-802e-4752-8528-fe7deded36e2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7f38dd40-388b-4a45-bd13-5e04894048bd"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d3d832f-da36-4b63-a8f1-b53316c69a35"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0ab75812-a15d-4122-928b-38cd2c6337d6"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e36991b-150c-4ab4-9130-e44281450659"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b111339-270e-4d02-b5a9-bf12e1aa18c0"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b7fe3f1-6172-48f0-8b4d-1c80c99bdf3f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d18ff30d-1a92-46ef-b775-1628ce4cb99e"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03198d98-9d45-45cc-b19b-2d60cf98099a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0892f9b0-9c4d-4e3b-a2a7-0e977c9b705e"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa98d256-fba4-42c8-bb0f-18bb9962bd58"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea345dda-b6d5-4880-8f39-9789c3e0a65f"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cbe6296-fbde-492e-bd11-b3a51b832a25"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("889f8342-10d5-43de-aa69-484bbeb1795a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33d078b1-b6bf-4d45-b3c6-ea131aa084b7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5e80d4a-6328-4c17-8ca5-6e6564255149"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f95e4c1-47ef-4c31-aea4-8d6116cd4fb6"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("02555f50-7059-4d99-9aa2-43ee15d2e833"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bcdf407d-3f58-4014-a79b-19238da836b2"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4b655453-132d-46b6-8b35-62d80a45158a"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("098ece85-1b94-49c2-a7be-b9b8a756e40b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61f39acf-7b49-4272-88b0-8be0beb89798"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5e8b1f8-6fdf-4b99-9dd5-7238bdab08d7"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ba49c76-abec-4ee7-a4dc-6d05dbc23391"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80894815-6a60-4a0c-87f8-9e1cbbf973e9"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("89cfea23-966f-4bc3-a050-65e2556a342b"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("214790ae-256d-4a53-a1fd-fb1df6a52a65"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4208dc43-8377-4365-a53a-e4648173c798"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("26bcdb98-7387-46ac-adf6-ea98a00a5033"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e6af31e-a65d-4b37-b913-19c0f551fffc"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59d5b859-9673-41ec-b91c-1d9d9db64572"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c249bf62-301a-4651-bebb-2900deb1dfbc"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("949cd514-59dd-47d4-991f-dd0458e16ec4"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aabdf76e-6fab-49f5-a8f1-8cbc8f96f7af"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff1a4174-4261-4b56-8211-39da92246785"), NodaTime.Instant.FromUnixTimeTicks(17657306259226320L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.Designer.cs b/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.Designer.cs deleted file mode 100644 index 434e79bb4..000000000 --- a/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.Designer.cs +++ /dev/null @@ -1,3387 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251219163616_AddPasswordResetTokenToUser")] - partial class AddPasswordResetTokenToUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("24c6151e-2ce7-4c31-ab8f-29fad1654cc2"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("b613c924-e1df-493b-9606-db040bf99f36"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("0a6706d2-d64f-43dc-9129-24382129ab71"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("713cd3c4-6023-4653-beda-567207a78eb2"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("2f44b873-0b1f-4560-bd0a-2d3949468e77"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("344bc2af-185c-4dfe-9796-9716db7e3eb2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c1f6caa4-33b1-4dc8-8382-9cf930c1e202"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("139b96e2-27a1-4217-a5d1-0896e86227df"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("b3d4b181-72a6-4f91-96a8-1ba2bc56da82"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("81d3ebd8-3b66-4be5-b3a4-accef6cf4f47"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("97cb3b72-8037-45b9-9092-577d329a0875"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("67a4fd6f-3977-4dcd-b273-c5ffa9398356"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2e8221c3-de1a-445a-9272-0014cd36f1bf"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("f0d3a3a5-1396-4773-a3ed-9808f4d900af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("007edc1d-0e35-446a-a786-0e07f8bfb1b0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c2c51ccd-9530-49e3-a0d6-0bca43556fb7"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("605a5129-c76b-43b4-85bb-d2e44b3379d6"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("beeecd3b-98d1-4352-913b-075e20b92a78"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("05403165-d20b-46ff-b388-b25c52cd64ee"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("c0d160fe-2c85-40ab-922d-e7245ec84cf7"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("6cb2b357-f979-4f62-8340-123dc5780f2a"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("1a4e97f5-a5fb-4cd2-842d-d3d7e8952b2e"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("1b84b33d-11be-4864-9b5e-8f640d81def9"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("3e88afe0-d321-41fc-98c0-519fbb588a9d"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("3b152d53-3bea-49e5-badc-33cf9d619387"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("5762e56b-9abc-4b34-bdc0-4f4096f56c08"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("37245896-55f2-42ef-9043-6a75844c505d"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("1ea39cd7-3dbd-4abd-891f-0fbd7e5f2531"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("124886e9-ad66-4ce7-aad1-a8a38b95db5a"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("0302c8d8-f3ee-4185-b8a0-4768b8828ac7"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("be4c0b73-ad62-4c51-97fd-176a1878b228"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("f9644f02-2672-43f6-999f-a935612a8a0b"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("f3498248-f390-4e11-a530-046ba606f89b"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("5a113778-0e7e-4a93-ae93-080b225b86f3"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("da7e2a7b-4421-40af-baa5-d31b865c2266"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("c43759ce-7c87-44d6-831d-7fe00f81d885"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("f4aa5789-71c6-4265-bfd0-b3a3e105bf81"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("e44e71ab-cd07-41af-9906-476ff31cd0e3"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("0b5f5d07-808c-4f6a-8ae1-b0802c3e7f8b"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("3d6f5f75-d523-4e18-8b2a-6cbd4380f8c2"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("2d68193b-2152-46bb-ba24-4f142d638535"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("43452569-f784-4b60-ac7f-c88b514b1685"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("22599817-ff19-4b03-aeff-56bad538aaf1"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("7d549efb-643a-4e8a-9b0c-db90d8b67362"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("b23c5115-9a0b-4dfa-8900-ca808c3a3a02"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("63b0ec1f-8e05-4fb8-abed-17530a761f03"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("0d5f3958-bb93-41bc-970c-5ba30c14a790"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("a288b007-b4f9-4a29-a5e6-e829f62a100c"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("c9d0f882-0936-45bc-8535-e51ac8b72fac"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("d9fd2bae-5fa8-4e2f-a3e8-6771fa0b62e7"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("22060311-f2a6-47fa-9a66-bb42935660f7"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("247eacca-359b-4a68-bc08-0f242336a22b"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("abe6463c-d1bc-4c56-b878-e66d8cc160d5"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("5c8e51af-8775-4f27-80be-b973e878db23"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("1cc95ea5-e1c7-423a-8167-d2f118806845"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("cf131a2a-0a31-4d24-b791-12521e3392ec"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("5d3de41a-ac14-4b07-947b-103cfe52c1b2"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("13bfa834-6979-4714-8d03-964fe5f28f2b"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8dd406bd-1a07-4933-a69a-a53bf442997a"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("d18208ae-1d14-4917-990d-c3dd3c1e43a1"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("da028730-ef4c-456a-8398-4fb434c0f1ac"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("a807a6fa-da0b-4517-b793-4e8c22b9b65d"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("0d535b03-5e10-4646-9391-560b9b487c3a"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("0c52fa92-5a09-452e-80e5-85ab4c4b3fa0"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("0cdc2c57-38b2-439a-bfde-234780b792b9"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("93c68dd2-c704-401b-834c-58099b166053"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("b70f9d19-1cd2-4b76-8c0e-0ec10fbcea0e"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("ba965db3-3eb8-43cf-aca9-5fe90b9b9bf3"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("0e803620-121b-4182-82b7-40b2f56f2c0c"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e7a82920-3d5f-4d53-bf95-f200920985e2"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("da2d49f2-1cf6-4146-832d-6115a1ed94e5"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("e7955aa4-3892-4a93-9d34-4aefeb069db7"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("e82f1b9b-c4dd-43a1-974b-f5aa11ddfd5b"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("bc9c9be7-3ee8-43bf-9c99-69802863a6c6"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("8cba2c6e-f9f0-459b-b4d4-f9568f67e47b"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("bc92ac4a-394c-41f5-8cde-314a7e33d6aa"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("2b4b0bd9-3e41-4603-897d-6a47e9b71953"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("5b1d08ac-fa3e-4534-a251-3a9413e84f61"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5d2911dd-7226-4014-9db8-127fc7a206bb"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("b16aca70-b385-4fc2-b01e-f919d5f1c06d"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("3337a84e-556b-440e-a528-d537927a8906"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("fd5084ed-05b9-44d9-b9d5-78ece190d961"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("c7ea825b-f588-47c4-a57b-1ccdfd5ae62a"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("f0d4d5e3-0e38-4f16-8afb-92d9cb45e272"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("b88c3a47-de90-4b85-a20e-7a8e9a68524e"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("bb5fdd88-7271-4b60-91bc-559341501081"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("57b5bb26-3d28-45bc-b939-d9294fbf3848"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("c57703bb-b92f-48e1-99e6-11de3e6f2fd9"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("d2f21447-1c40-4ae9-9908-6a2f1cb352b9"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("85488604-9599-4c5c-bba7-91f650b607b4"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("9336952d-7440-432a-aa61-8c971d23a6c0"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("4d57d67f-20e4-48c1-94dc-dae065b0f653"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("94a5dc6f-1b39-4f7e-9ca4-ac63f8ce490e"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("a4820570-01d4-421c-b4e5-3da47f89c4e6"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("15f6448e-5d79-4d72-aabc-c2a2193fea4c"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("eba79d4b-8f85-4bae-842b-dc9aae7ae535"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("b83129a5-d7f9-4fbf-88a0-c207fca05989"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("daadaf13-820d-4d29-bc44-205a0c37138e"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("d315428b-879f-444e-b484-8bb82f27d557"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("5826f3f2-895f-4203-923a-93d409c525fb"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("1e48fc83-95c8-45b7-97fa-2d633c0d9d5f"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661621751534507L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.cs b/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.cs deleted file mode 100644 index 2f4edc8eb..000000000 --- a/src/Melodee.Common/Migrations/20251219163616_AddPasswordResetTokenToUser.cs +++ /dev/null @@ -1,1465 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPasswordResetTokenToUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "PasswordResetToken", - table: "Users", - type: "character varying(64)", - maxLength: 64, - nullable: true); - - migrationBuilder.AddColumn( - name: "PasswordResetTokenExpiresAt", - table: "Users", - type: "timestamp with time zone", - nullable: true); - - migrationBuilder.AddColumn( - name: "StarredGenres", - table: "Users", - type: "character varying(2000)", - maxLength: 2000, - nullable: true); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("24c6151e-2ce7-4c31-ab8f-29fad1654cc2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b613c924-e1df-493b-9606-db040bf99f36"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a6706d2-d64f-43dc-9129-24382129ab71"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("713cd3c4-6023-4653-beda-567207a78eb2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2f44b873-0b1f-4560-bd0a-2d3949468e77"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("344bc2af-185c-4dfe-9796-9716db7e3eb2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1f6caa4-33b1-4dc8-8382-9cf930c1e202"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("139b96e2-27a1-4217-a5d1-0896e86227df"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3d4b181-72a6-4f91-96a8-1ba2bc56da82"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67a4fd6f-3977-4dcd-b273-c5ffa9398356"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0302c8d8-f3ee-4185-b8a0-4768b8828ac7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be4c0b73-ad62-4c51-97fd-176a1878b228"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9644f02-2672-43f6-999f-a935612a8a0b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f3498248-f390-4e11-a530-046ba606f89b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a113778-0e7e-4a93-ae93-080b225b86f3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da7e2a7b-4421-40af-baa5-d31b865c2266"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c43759ce-7c87-44d6-831d-7fe00f81d885"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4aa5789-71c6-4265-bfd0-b3a3e105bf81"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e44e71ab-cd07-41af-9906-476ff31cd0e3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b5f5d07-808c-4f6a-8ae1-b0802c3e7f8b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d6f5f75-d523-4e18-8b2a-6cbd4380f8c2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2d68193b-2152-46bb-ba24-4f142d638535"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("43452569-f784-4b60-ac7f-c88b514b1685"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22599817-ff19-4b03-aeff-56bad538aaf1"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d549efb-643a-4e8a-9b0c-db90d8b67362"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b23c5115-9a0b-4dfa-8900-ca808c3a3a02"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("63b0ec1f-8e05-4fb8-abed-17530a761f03"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d5f3958-bb93-41bc-970c-5ba30c14a790"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a288b007-b4f9-4a29-a5e6-e829f62a100c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c9d0f882-0936-45bc-8535-e51ac8b72fac"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d18208ae-1d14-4917-990d-c3dd3c1e43a1"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da028730-ef4c-456a-8398-4fb434c0f1ac"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1cc95ea5-e1c7-423a-8167-d2f118806845"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf131a2a-0a31-4d24-b791-12521e3392ec"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d3de41a-ac14-4b07-947b-103cfe52c1b2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13bfa834-6979-4714-8d03-964fe5f28f2b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8dd406bd-1a07-4933-a69a-a53bf442997a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cb2b357-f979-4f62-8340-123dc5780f2a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a4e97f5-a5fb-4cd2-842d-d3d7e8952b2e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b84b33d-11be-4864-9b5e-8f640d81def9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e88afe0-d321-41fc-98c0-519fbb588a9d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81d3ebd8-3b66-4be5-b3a4-accef6cf4f47"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("97cb3b72-8037-45b9-9092-577d329a0875"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d2911dd-7226-4014-9db8-127fc7a206bb"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b16aca70-b385-4fc2-b01e-f919d5f1c06d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3337a84e-556b-440e-a528-d537927a8906"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd5084ed-05b9-44d9-b9d5-78ece190d961"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7ea825b-f588-47c4-a57b-1ccdfd5ae62a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0d4d5e3-0e38-4f16-8afb-92d9cb45e272"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b88c3a47-de90-4b85-a20e-7a8e9a68524e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e8221c3-de1a-445a-9272-0014cd36f1bf"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0d3a3a5-1396-4773-a3ed-9808f4d900af"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("007edc1d-0e35-446a-a786-0e07f8bfb1b0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c2c51ccd-9530-49e3-a0d6-0bca43556fb7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("605a5129-c76b-43b4-85bb-d2e44b3379d6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("beeecd3b-98d1-4352-913b-075e20b92a78"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05403165-d20b-46ff-b388-b25c52cd64ee"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0d160fe-2c85-40ab-922d-e7245ec84cf7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b152d53-3bea-49e5-badc-33cf9d619387"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5762e56b-9abc-4b34-bdc0-4f4096f56c08"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("37245896-55f2-42ef-9043-6a75844c505d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ea39cd7-3dbd-4abd-891f-0fbd7e5f2531"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("124886e9-ad66-4ce7-aad1-a8a38b95db5a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a807a6fa-da0b-4517-b793-4e8c22b9b65d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d535b03-5e10-4646-9391-560b9b487c3a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c52fa92-5a09-452e-80e5-85ab4c4b3fa0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0cdc2c57-38b2-439a-bfde-234780b792b9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93c68dd2-c704-401b-834c-58099b166053"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b70f9d19-1cd2-4b76-8c0e-0ec10fbcea0e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba965db3-3eb8-43cf-aca9-5fe90b9b9bf3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e803620-121b-4182-82b7-40b2f56f2c0c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7a82920-3d5f-4d53-bf95-f200920985e2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da2d49f2-1cf6-4146-832d-6115a1ed94e5"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7955aa4-3892-4a93-9d34-4aefeb069db7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e82f1b9b-c4dd-43a1-974b-f5aa11ddfd5b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc9c9be7-3ee8-43bf-9c99-69802863a6c6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8cba2c6e-f9f0-459b-b4d4-f9568f67e47b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc92ac4a-394c-41f5-8cde-314a7e33d6aa"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2b4b0bd9-3e41-4603-897d-6a47e9b71953"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5b1d08ac-fa3e-4534-a251-3a9413e84f61"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85488604-9599-4c5c-bba7-91f650b607b4"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9336952d-7440-432a-aa61-8c971d23a6c0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d57d67f-20e4-48c1-94dc-dae065b0f653"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94a5dc6f-1b39-4f7e-9ca4-ac63f8ce490e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4820570-01d4-421c-b4e5-3da47f89c4e6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("15f6448e-5d79-4d72-aabc-c2a2193fea4c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eba79d4b-8f85-4bae-842b-dc9aae7ae535"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb5fdd88-7271-4b60-91bc-559341501081"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("57b5bb26-3d28-45bc-b939-d9294fbf3848"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c57703bb-b92f-48e1-99e6-11de3e6f2fd9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2f21447-1c40-4ae9-9908-6a2f1cb352b9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9fd2bae-5fa8-4e2f-a3e8-6771fa0b62e7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22060311-f2a6-47fa-9a66-bb42935660f7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("247eacca-359b-4a68-bc08-0f242336a22b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abe6463c-d1bc-4c56-b878-e66d8cc160d5"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5c8e51af-8775-4f27-80be-b973e878db23"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b83129a5-d7f9-4fbf-88a0-c207fca05989"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("daadaf13-820d-4d29-bc44-205a0c37138e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d315428b-879f-444e-b484-8bb82f27d557"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5826f3f2-895f-4203-923a-93d409c525fb"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e48fc83-95c8-45b7-97fa-2d633c0d9d5f"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "PasswordResetToken", - table: "Users"); - - migrationBuilder.DropColumn( - name: "PasswordResetTokenExpiresAt", - table: "Users"); - - migrationBuilder.DropColumn( - name: "StarredGenres", - table: "Users"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e43e1f96-d164-430d-8729-9cb1f94ad26d"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e1e79e1-7530-45bc-8a26-ac71ae4c62f0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2afc297c-5f17-4c69-91b4-261c6b08485f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af93096e-9798-4467-a8bb-53b915a57542"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ea06c4a-6110-4d35-bb37-b348f568d15b"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e5b73c5-dc94-4c2f-8937-a17b0217f394"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a177ab19-c88d-4c38-a525-6e24d7556249"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("171c5d1f-8cd7-4898-8b3b-dd155fcbf53c"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("88d5a545-7a27-40cf-be0f-cb81b4ab16f5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e2ee2b12-5925-4360-8f54-f2c66f703a07"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fc7a6f03-cb7d-442a-b496-10ea9ea85b45"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5ba05533-9e9c-4e7a-a187-2642f5438b9e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e553eb2b-bef9-4fca-9b52-53c4d57a3edc"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b40e5c83-7cb1-4f8b-8c46-4fcf7fc7539a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7b71773-bb0d-4add-b5f9-dbdc1455688e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f1b8d89-d99b-472e-b5ba-50883cbf7272"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f118f05-fd57-4d26-b231-e043e124c230"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f776d5a-69f0-4fee-8814-f0e39e69e2b0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cf43baf-b724-4de7-b8b9-60617fcf8906"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a421a1f-22bc-4481-8712-18b569893469"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("27ec9b29-107f-4a76-9f4f-97cebfb5aa00"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa6bb8c9-d6e3-42d4-9efb-cbb16c2a755a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53bb8439-66d1-432b-bc9e-3e43b37a5066"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("db41019e-89d8-4656-bde7-4ebc93fbb490"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0062797-1222-494a-95b3-619b8666fea7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7a4f8aed-330b-4367-8582-03a3d0a63d36"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebb26a3d-1306-4fab-9da9-6ced3181f074"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59220e3a-aeaf-495f-a05e-1867d9bfbee1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7329f19b-b8d5-4a01-941f-4d9cde4f5949"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a73cc166-6d15-4fcf-b7e3-832d8c0c5b33"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a76498c4-d21f-4447-b37d-4863736f1fe3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("673d057f-b766-4e17-8b10-9e759555dc58"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce605a2f-062f-4b94-8533-3cf506b25d20"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("071cb421-b259-427c-9e0f-1f71f4180813"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ee6fb689-952f-45cc-aec3-900375125e90"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1904f25b-fe4c-4d3b-b697-77e791682cfc"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0ad12ae-7b7f-4a2d-b288-20dba05bfc38"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("50aa22eb-b428-431d-990b-6e8028752b25"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ede8008-fa33-42fe-ade8-8d9c8ae86443"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f7501577-6eb6-4043-8610-6f48e9f3bd5f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4537847b-3841-4c4c-8213-6cbc703bb7a0"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8009b84d-4145-483b-b1cd-fa7715dc33c3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("761e5d2a-40db-4806-8983-19d38cb6b9cf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7b4982eb-626e-4266-b19d-d48df7677a50"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5f999c1-4be8-4d51-9e7d-0d8955939116"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6f78a321-4587-49bf-a1fc-fcf799ec89e5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7ff065a-763d-4cb7-85da-372c082e59b5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff71bfa5-a58a-4b81-99a4-4ec553685301"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b025525c-0d03-4ba2-a390-017837cadb63"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0949d3d-9f32-4aa6-acf7-d9a5a08150e3"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e587d3be-38a4-42fc-845f-52cd5a9b41ea"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("495304a2-41bf-48c0-a564-77515144b4d7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33d6a011-69cf-4f17-947e-79c2b394ef81"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5feea9ab-e025-4aa4-b96e-3195379f3bd5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d873a075-7f01-411b-9004-32ffabb03084"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b69ae13-a59e-4855-82be-39b9b2069385"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4c46d322-3eea-4b9d-99fc-09090ff2d111"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a0da1ffb-9a91-4d67-a14f-b6203f71b9fe"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d978a43-f74a-4368-a4e5-f3edbca9ea9f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("587cb39b-b707-42df-949f-d58b77d07ded"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06fe43bf-9116-4113-b55d-e2ff634384a2"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d67277b-57e9-4058-b334-90a26d4ccc20"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("23b7a3ca-4ffa-4040-a96d-154c94909d5e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4bfff23-9925-40d2-b85b-4553025585af"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7b9992bc-aa05-454b-b441-aacfd8e4b5cf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fed1fb6-956a-44de-bc00-262bbe1dbfd6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9acba9f-712d-4813-8b03-b13a8ebe3d65"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("313583a6-12db-474a-96d1-7588aaf59bfa"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5671eab4-fceb-4bba-a810-858f914fba06"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0c59982-0596-4ea8-9cc6-c55fe2fc4c13"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78c56522-f242-4f53-9140-c20c3b0b4aa5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25e56255-f33e-4852-8bd5-8bf725f92613"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("414b40fa-7f9a-4a7c-9b60-2d2366443209"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36aef1e7-d582-49ac-9695-bc52bbabf1f6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("765d6352-e047-46ab-9c6f-1b2174f4ab0e"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("961b982b-bc70-45dc-8e3e-bd02af2b1c3f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4d7865d-4e3d-4bc1-9a59-6df55671a5b2"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab3badeb-4fe7-4423-9bdf-7d1bcb859f2a"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ce72612-2d07-4ad3-abf3-de21104338d6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b2ffc4fa-9d50-422b-a013-1e9e5c40c775"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("896580d5-8f5f-4752-8061-a1972791aa25"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d30291e-6e30-4d85-b4f5-2a44e83938b7"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("234fc299-a213-4d86-9fb3-4b9111d552ba"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("859ad9eb-4e24-47e8-8aac-4b3a4b7a1353"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("adc1b117-14e7-40e3-89da-55e722a859b5"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("36080c24-5efa-4b7b-81f8-69ce051d0898"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a2a226c-5ab4-47bb-b312-f6a7e0eef11f"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33540ef5-4c6f-45ff-a609-b88176444939"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d7befc5-1ddc-46cd-9179-473e878f0214"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a3688434-ff86-4e7f-adcd-2726a8b6eae1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1fcd6b0e-57e1-4e12-ba0d-c893673bbb24"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b962205c-cb6f-4e70-a71a-32e739c634ce"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b681217-291b-42b8-939e-b8114fbbd4c9"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("768dc3f8-1be8-4a2e-a108-0d64ef59a6df"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1c30aba4-7ac8-4a7a-9fc2-03699daf2dbf"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4566e3f5-9750-49d0-8a38-1678386595ae"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a9bc93f-07ea-4094-a8f4-ad9014d591e6"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dfc139de-a210-4586-9fd7-7f071925a457"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d8187958-cb42-4bd2-8956-d9b013920eef"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec1f3235-d19c-4741-859d-c8e6de9a2ee1"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cd167563-cca5-44c6-9ec0-950754a5b5bd"), NodaTime.Instant.FromUnixTimeTicks(17657332146305413L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.Designer.cs b/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.Designer.cs deleted file mode 100644 index 6cfcfc870..000000000 --- a/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.Designer.cs +++ /dev/null @@ -1,3552 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251219193658_AddUserPlaybackSettingsAndEqualizerPresets")] - partial class AddUserPlaybackSettingsAndEqualizerPresets - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("0e5fafc0-6379-4531-9b14-5aaff47055b0"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("a5be89c7-cf1d-4451-b607-7893b976c3ee"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("4c7a928e-9384-44af-98d3-81e0e277822e"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("29642bbf-8d8f-4d00-a3bb-5fa252f56680"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("d531cb3d-af6e-4a87-a96e-320a36371336"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("2aff0c14-11bc-4c13-9fe1-99dd888de81b"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("d2332eac-9dbf-4e27-b361-f6ce3ee0bf08"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("6684a15c-63b3-496c-af80-554632085e0f"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6ec600fb-629b-4eb1-a171-cc87236fded3"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("fa0e8f86-c403-45fe-bdd2-526f725c0793"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("6cb483dd-b3f4-469b-8035-28b72be329b6"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("be000480-fcb6-4307-a622-2eb99c91227d"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("4bb9a6c7-b8fe-46ea-8f2b-ef4ca5a29177"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("c339e813-2971-48e7-8123-d258d927ad5f"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("d44738a7-30c0-4b9e-ba24-0a8cc7252e69"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("49d21f0b-bc3e-4fcf-bbdd-8124920ccf44"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("a96f9614-423b-441e-8904-8debfc06cd3f"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("6ee0fb26-f6e4-4a11-a72a-977273e01093"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("f4e1d602-b49e-4093-8386-f0b2fd409d92"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("a2311842-b54e-46ba-9ad8-13a180c6af8b"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("508275e6-254a-4eae-9d2d-0d1f63b64303"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("a3416e0f-e7fe-45dc-9ca6-b31b6f64bd8a"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("4bacf2cd-12fd-4f96-8ee9-db7fba343b31"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("cfc3dfb4-e698-4ba5-b12a-266be3eecca1"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ddbaaaa-718b-4c38-9c5e-a8929f8623f4"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("2a74eab0-62a8-4328-9b27-d804d64082c5"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("e136442c-d8fb-4f85-bd15-bcf53ea7032c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("559fb90f-536c-4345-9e79-731969c05cae"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("c7ce2689-aa48-4016-98fb-c5dc17d400e7"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("acdcf344-9de9-4d5d-9c8c-b47988ad85b7"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("0725d3d9-d657-4ffb-b43b-ad7e0f7aa822"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("fd43bae8-04d1-41ad-b7b7-b6390c10f272"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("d307119e-d5d2-4991-956c-e899c0a868ab"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("c5d1938a-ac98-4f6d-974e-578fa7e86b9c"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("6080d960-25eb-4469-b3a2-607e681cb48b"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("b2f6b1ff-cac6-463f-a4d8-334cb17635e3"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("ea9e2f32-2138-4836-a067-ec46c4c100d6"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("c8320e95-ebb5-4aed-8d13-0d3dc31746c5"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("2dd51106-3302-4091-8a5f-db0cd527fa99"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("604ec997-4d33-4ea4-aaa6-1724e4c5f45a"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("916cbff4-1e36-4141-a1c7-0f3ea0745428"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("bf6d9708-387c-41de-a2f8-17f3bf4f9f71"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("85b0fe0b-2c72-4269-8bfd-3a13340bd9e8"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("d768e5be-8a26-46ba-9edf-ecff0cfcd2ed"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("ddc508c9-7883-4eb9-80af-824aaa1cac8e"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("b7c0c395-f45c-4740-889e-80ecdc8c1892"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("56b0fa70-772f-4280-ba35-17462a7761ff"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("06da3533-2459-4547-9b36-1a6c55307cbf"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("21123452-b9b6-4718-9972-ae1e1070b520"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("441affae-85a9-4c72-99f6-5ea5e6bbe489"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("6756f116-c5f8-4992-9589-ee479d9956e0"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("e9e8a325-abec-4247-ba98-e3d8e82f056c"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("ea586ab3-668e-4b19-bf3a-32a7efaa0266"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("da382174-e63e-4a45-bb28-380fb0d1c364"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("53306371-bd66-4964-893a-9b10d8124997"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("8f13f538-783e-4233-9e5b-1683c6657484"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("dcd813cc-7684-4a28-9f38-e3fca891d567"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("ebe77efc-e379-4c67-a9cb-26bdf9ddcd78"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("9673f581-b1e9-4cd4-9d01-ca3aa4a0ebee"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("fe7794e1-03f5-4e4d-a9ef-9989e0fa000e"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("69e65ee3-7124-4244-818a-a826e0c9a994"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("d36e5b1d-cfbd-41f1-b5ab-1b7b593a581b"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("c1937a53-4aba-4496-8d27-0de204813e03"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("022ad5e6-7088-4596-9bc1-f04b04589b19"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("4ee42872-5e14-42ad-9784-5624cbc97705"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("d86ca6eb-d39c-4179-993c-ef4d26f565e2"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("60c34e6c-c969-48d6-9ac5-623878348474"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("a5559073-6d6a-4320-b075-8875aae152d7"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("b1874a29-c370-4ef1-9fec-1729706a36e2"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("82bd4510-ef8a-41d6-8795-b138ba925a53"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("f62d0061-5496-4032-bb00-6b2ff69044a8"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("3dc2a534-61d5-4a41-81d8-7e41c6d3e346"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("ea41f656-8bac-421c-9e42-9764a8195ef1"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("4f6469b6-1dc8-4e7d-bde1-00185f66b299"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("18e309c4-14f3-4561-9221-9427f2f89f54"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("8eaac2ca-1ca8-481f-9776-42dfe4617270"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("9bb529ad-b17a-46c8-ada8-c525071f58b7"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("3a6ad1fb-af71-4652-b2a0-cf32da6400b9"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("c62f51c9-6f17-42e6-bd10-1bd93593e233"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("d5743b45-a247-4f83-93a6-7db88c214b17"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("287807d8-1bdb-41d4-8435-210625156dfe"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("8f0a3b66-8f13-47b5-a924-b4c6df12a937"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08111b40-cf22-4072-bb7d-472d569e2a04"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9e0a64f1-35e5-4ad5-9138-1474f7f422e5"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("a72f9352-69ce-4d5c-81c4-2c539384562a"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("01dd92b2-58b4-43b9-bcae-2c9fd13ca1f5"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("ba6d3605-02f0-4ddd-8921-2f6c6456a2eb"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("7fd4fa5b-7234-4252-addd-6ed906ca193f"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("8788b455-fc65-4e0a-b549-2fb238250076"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("292d86c9-0559-4936-97c4-901c4bd571c9"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d40ecf7-dd52-4764-98ad-4bebd425db48"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("e24c81d7-3641-48af-856b-73e68b92f7ca"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("0c17b34d-5229-4d0a-87d9-2dd1aa693761"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("01b000fc-9565-47ab-b057-429d07d6db2f"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("8c0856aa-a088-48cf-a12a-79803d59cb8c"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("4707c407-be46-4eba-8066-74008eca2e4c"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("2a4a532e-154a-4b3f-a300-b4176afbf938"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("51d23237-dae0-4a1e-aadb-52385e6fb432"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("5a1ca326-d1dc-4ac7-8a0e-25b37ada8757"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("ed2a3a2d-d925-4516-b914-eeb72455df8f"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("c0203b6d-434d-4bf2-97e4-b62cb490c84a"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661730176061653L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("Shares"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.cs b/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.cs deleted file mode 100644 index aa36cce7e..000000000 --- a/src/Melodee.Common/Migrations/20251219193658_AddUserPlaybackSettingsAndEqualizerPresets.cs +++ /dev/null @@ -1,1529 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserPlaybackSettingsAndEqualizerPresets : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "UserEqualizerPresets", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - BandsJson = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), - IsDefault = table.Column(type: "boolean", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserEqualizerPresets", x => x.Id); - table.ForeignKey( - name: "FK_UserEqualizerPresets_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserPlaybackSettings", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - CrossfadeDuration = table.Column(type: "double precision", nullable: false), - GaplessPlayback = table.Column(type: "boolean", nullable: false), - VolumeNormalization = table.Column(type: "boolean", nullable: false), - ReplayGain = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - AudioQuality = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - EqualizerPreset = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - LastUsedDevice = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserPlaybackSettings", x => x.Id); - table.ForeignKey( - name: "FK_UserPlaybackSettings_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e5fafc0-6379-4531-9b14-5aaff47055b0"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5be89c7-cf1d-4451-b607-7893b976c3ee"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4c7a928e-9384-44af-98d3-81e0e277822e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("29642bbf-8d8f-4d00-a3bb-5fa252f56680"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d531cb3d-af6e-4a87-a96e-320a36371336"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2aff0c14-11bc-4c13-9fe1-99dd888de81b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2332eac-9dbf-4e27-b361-f6ce3ee0bf08"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6684a15c-63b3-496c-af80-554632085e0f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ec600fb-629b-4eb1-a171-cc87236fded3"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be000480-fcb6-4307-a622-2eb99c91227d"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("acdcf344-9de9-4d5d-9c8c-b47988ad85b7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0725d3d9-d657-4ffb-b43b-ad7e0f7aa822"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd43bae8-04d1-41ad-b7b7-b6390c10f272"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d307119e-d5d2-4991-956c-e899c0a868ab"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5d1938a-ac98-4f6d-974e-578fa7e86b9c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6080d960-25eb-4469-b3a2-607e681cb48b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b2f6b1ff-cac6-463f-a4d8-334cb17635e3"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea9e2f32-2138-4836-a067-ec46c4c100d6"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c8320e95-ebb5-4aed-8d13-0d3dc31746c5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2dd51106-3302-4091-8a5f-db0cd527fa99"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("604ec997-4d33-4ea4-aaa6-1724e4c5f45a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("916cbff4-1e36-4141-a1c7-0f3ea0745428"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf6d9708-387c-41de-a2f8-17f3bf4f9f71"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85b0fe0b-2c72-4269-8bfd-3a13340bd9e8"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d768e5be-8a26-46ba-9edf-ecff0cfcd2ed"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ddc508c9-7883-4eb9-80af-824aaa1cac8e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7c0c395-f45c-4740-889e-80ecdc8c1892"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56b0fa70-772f-4280-ba35-17462a7761ff"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06da3533-2459-4547-9b36-1a6c55307cbf"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21123452-b9b6-4718-9972-ae1e1070b520"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe7794e1-03f5-4e4d-a9ef-9989e0fa000e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69e65ee3-7124-4244-818a-a826e0c9a994"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53306371-bd66-4964-893a-9b10d8124997"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f13f538-783e-4233-9e5b-1683c6657484"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dcd813cc-7684-4a28-9f38-e3fca891d567"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebe77efc-e379-4c67-a9cb-26bdf9ddcd78"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9673f581-b1e9-4cd4-9d01-ca3aa4a0ebee"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("508275e6-254a-4eae-9d2d-0d1f63b64303"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a3416e0f-e7fe-45dc-9ca6-b31b6f64bd8a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4bacf2cd-12fd-4f96-8ee9-db7fba343b31"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cfc3dfb4-e698-4ba5-b12a-266be3eecca1"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fa0e8f86-c403-45fe-bdd2-526f725c0793"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cb483dd-b3f4-469b-8035-28b72be329b6"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c62f51c9-6f17-42e6-bd10-1bd93593e233"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5743b45-a247-4f83-93a6-7db88c214b17"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("287807d8-1bdb-41d4-8435-210625156dfe"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f0a3b66-8f13-47b5-a924-b4c6df12a937"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("08111b40-cf22-4072-bb7d-472d569e2a04"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e0a64f1-35e5-4ad5-9138-1474f7f422e5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a72f9352-69ce-4d5c-81c4-2c539384562a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4bb9a6c7-b8fe-46ea-8f2b-ef4ca5a29177"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c339e813-2971-48e7-8123-d258d927ad5f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d44738a7-30c0-4b9e-ba24-0a8cc7252e69"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49d21f0b-bc3e-4fcf-bbdd-8124920ccf44"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a96f9614-423b-441e-8904-8debfc06cd3f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ee0fb26-f6e4-4a11-a72a-977273e01093"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4e1d602-b49e-4093-8386-f0b2fd409d92"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2311842-b54e-46ba-9ad8-13a180c6af8b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ddbaaaa-718b-4c38-9c5e-a8929f8623f4"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a74eab0-62a8-4328-9b27-d804d64082c5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e136442c-d8fb-4f85-bd15-bcf53ea7032c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("559fb90f-536c-4345-9e79-731969c05cae"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7ce2689-aa48-4016-98fb-c5dc17d400e7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d36e5b1d-cfbd-41f1-b5ab-1b7b593a581b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1937a53-4aba-4496-8d27-0de204813e03"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("022ad5e6-7088-4596-9bc1-f04b04589b19"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ee42872-5e14-42ad-9784-5624cbc97705"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d86ca6eb-d39c-4179-993c-ef4d26f565e2"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("60c34e6c-c969-48d6-9ac5-623878348474"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5559073-6d6a-4320-b075-8875aae152d7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1874a29-c370-4ef1-9fec-1729706a36e2"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82bd4510-ef8a-41d6-8795-b138ba925a53"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f62d0061-5496-4032-bb00-6b2ff69044a8"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3dc2a534-61d5-4a41-81d8-7e41c6d3e346"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea41f656-8bac-421c-9e42-9764a8195ef1"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4f6469b6-1dc8-4e7d-bde1-00185f66b299"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18e309c4-14f3-4561-9221-9427f2f89f54"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8eaac2ca-1ca8-481f-9776-42dfe4617270"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9bb529ad-b17a-46c8-ada8-c525071f58b7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a6ad1fb-af71-4652-b2a0-cf32da6400b9"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("292d86c9-0559-4936-97c4-901c4bd571c9"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8d40ecf7-dd52-4764-98ad-4bebd425db48"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e24c81d7-3641-48af-856b-73e68b92f7ca"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c17b34d-5229-4d0a-87d9-2dd1aa693761"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01b000fc-9565-47ab-b057-429d07d6db2f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c0856aa-a088-48cf-a12a-79803d59cb8c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4707c407-be46-4eba-8066-74008eca2e4c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01dd92b2-58b4-43b9-bcae-2c9fd13ca1f5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba6d3605-02f0-4ddd-8921-2f6c6456a2eb"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fd4fa5b-7234-4252-addd-6ed906ca193f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8788b455-fc65-4e0a-b549-2fb238250076"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("441affae-85a9-4c72-99f6-5ea5e6bbe489"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6756f116-c5f8-4992-9589-ee479d9956e0"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e9e8a325-abec-4247-ba98-e3d8e82f056c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea586ab3-668e-4b19-bf3a-32a7efaa0266"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da382174-e63e-4a45-bb28-380fb0d1c364"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a4a532e-154a-4b3f-a300-b4176afbf938"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51d23237-dae0-4a1e-aadb-52385e6fb432"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a1ca326-d1dc-4ac7-8a0e-25b37ada8757"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed2a3a2d-d925-4516-b914-eeb72455df8f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0203b6d-434d-4bf2-97e4-b62cb490c84a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.CreateIndex( - name: "IX_UserEqualizerPresets_ApiKey", - table: "UserEqualizerPresets", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserEqualizerPresets_UserId_Name", - table: "UserEqualizerPresets", - columns: new[] { "UserId", "Name" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserPlaybackSettings_ApiKey", - table: "UserPlaybackSettings", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserPlaybackSettings_UserId", - table: "UserPlaybackSettings", - column: "UserId", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "UserEqualizerPresets"); - - migrationBuilder.DropTable( - name: "UserPlaybackSettings"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("24c6151e-2ce7-4c31-ab8f-29fad1654cc2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b613c924-e1df-493b-9606-db040bf99f36"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a6706d2-d64f-43dc-9129-24382129ab71"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("713cd3c4-6023-4653-beda-567207a78eb2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2f44b873-0b1f-4560-bd0a-2d3949468e77"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("344bc2af-185c-4dfe-9796-9716db7e3eb2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1f6caa4-33b1-4dc8-8382-9cf930c1e202"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("139b96e2-27a1-4217-a5d1-0896e86227df"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b3d4b181-72a6-4f91-96a8-1ba2bc56da82"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67a4fd6f-3977-4dcd-b273-c5ffa9398356"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0302c8d8-f3ee-4185-b8a0-4768b8828ac7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be4c0b73-ad62-4c51-97fd-176a1878b228"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9644f02-2672-43f6-999f-a935612a8a0b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f3498248-f390-4e11-a530-046ba606f89b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a113778-0e7e-4a93-ae93-080b225b86f3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da7e2a7b-4421-40af-baa5-d31b865c2266"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c43759ce-7c87-44d6-831d-7fe00f81d885"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4aa5789-71c6-4265-bfd0-b3a3e105bf81"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e44e71ab-cd07-41af-9906-476ff31cd0e3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b5f5d07-808c-4f6a-8ae1-b0802c3e7f8b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d6f5f75-d523-4e18-8b2a-6cbd4380f8c2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2d68193b-2152-46bb-ba24-4f142d638535"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("43452569-f784-4b60-ac7f-c88b514b1685"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22599817-ff19-4b03-aeff-56bad538aaf1"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d549efb-643a-4e8a-9b0c-db90d8b67362"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b23c5115-9a0b-4dfa-8900-ca808c3a3a02"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("63b0ec1f-8e05-4fb8-abed-17530a761f03"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d5f3958-bb93-41bc-970c-5ba30c14a790"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a288b007-b4f9-4a29-a5e6-e829f62a100c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c9d0f882-0936-45bc-8535-e51ac8b72fac"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d18208ae-1d14-4917-990d-c3dd3c1e43a1"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da028730-ef4c-456a-8398-4fb434c0f1ac"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1cc95ea5-e1c7-423a-8167-d2f118806845"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf131a2a-0a31-4d24-b791-12521e3392ec"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d3de41a-ac14-4b07-947b-103cfe52c1b2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13bfa834-6979-4714-8d03-964fe5f28f2b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8dd406bd-1a07-4933-a69a-a53bf442997a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cb2b357-f979-4f62-8340-123dc5780f2a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1a4e97f5-a5fb-4cd2-842d-d3d7e8952b2e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b84b33d-11be-4864-9b5e-8f640d81def9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3e88afe0-d321-41fc-98c0-519fbb588a9d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81d3ebd8-3b66-4be5-b3a4-accef6cf4f47"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("97cb3b72-8037-45b9-9092-577d329a0875"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d2911dd-7226-4014-9db8-127fc7a206bb"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b16aca70-b385-4fc2-b01e-f919d5f1c06d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3337a84e-556b-440e-a528-d537927a8906"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd5084ed-05b9-44d9-b9d5-78ece190d961"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7ea825b-f588-47c4-a57b-1ccdfd5ae62a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0d4d5e3-0e38-4f16-8afb-92d9cb45e272"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b88c3a47-de90-4b85-a20e-7a8e9a68524e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e8221c3-de1a-445a-9272-0014cd36f1bf"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0d3a3a5-1396-4773-a3ed-9808f4d900af"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("007edc1d-0e35-446a-a786-0e07f8bfb1b0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c2c51ccd-9530-49e3-a0d6-0bca43556fb7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("605a5129-c76b-43b4-85bb-d2e44b3379d6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("beeecd3b-98d1-4352-913b-075e20b92a78"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05403165-d20b-46ff-b388-b25c52cd64ee"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0d160fe-2c85-40ab-922d-e7245ec84cf7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b152d53-3bea-49e5-badc-33cf9d619387"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5762e56b-9abc-4b34-bdc0-4f4096f56c08"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("37245896-55f2-42ef-9043-6a75844c505d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ea39cd7-3dbd-4abd-891f-0fbd7e5f2531"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("124886e9-ad66-4ce7-aad1-a8a38b95db5a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a807a6fa-da0b-4517-b793-4e8c22b9b65d"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d535b03-5e10-4646-9391-560b9b487c3a"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c52fa92-5a09-452e-80e5-85ab4c4b3fa0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0cdc2c57-38b2-439a-bfde-234780b792b9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("93c68dd2-c704-401b-834c-58099b166053"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b70f9d19-1cd2-4b76-8c0e-0ec10fbcea0e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba965db3-3eb8-43cf-aca9-5fe90b9b9bf3"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e803620-121b-4182-82b7-40b2f56f2c0c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7a82920-3d5f-4d53-bf95-f200920985e2"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da2d49f2-1cf6-4146-832d-6115a1ed94e5"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e7955aa4-3892-4a93-9d34-4aefeb069db7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e82f1b9b-c4dd-43a1-974b-f5aa11ddfd5b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc9c9be7-3ee8-43bf-9c99-69802863a6c6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8cba2c6e-f9f0-459b-b4d4-f9568f67e47b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc92ac4a-394c-41f5-8cde-314a7e33d6aa"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2b4b0bd9-3e41-4603-897d-6a47e9b71953"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5b1d08ac-fa3e-4534-a251-3a9413e84f61"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85488604-9599-4c5c-bba7-91f650b607b4"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9336952d-7440-432a-aa61-8c971d23a6c0"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d57d67f-20e4-48c1-94dc-dae065b0f653"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94a5dc6f-1b39-4f7e-9ca4-ac63f8ce490e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4820570-01d4-421c-b4e5-3da47f89c4e6"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("15f6448e-5d79-4d72-aabc-c2a2193fea4c"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("eba79d4b-8f85-4bae-842b-dc9aae7ae535"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bb5fdd88-7271-4b60-91bc-559341501081"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("57b5bb26-3d28-45bc-b939-d9294fbf3848"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c57703bb-b92f-48e1-99e6-11de3e6f2fd9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2f21447-1c40-4ae9-9908-6a2f1cb352b9"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9fd2bae-5fa8-4e2f-a3e8-6771fa0b62e7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("22060311-f2a6-47fa-9a66-bb42935660f7"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("247eacca-359b-4a68-bc08-0f242336a22b"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abe6463c-d1bc-4c56-b878-e66d8cc160d5"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5c8e51af-8775-4f27-80be-b973e878db23"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b83129a5-d7f9-4fbf-88a0-c207fca05989"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("daadaf13-820d-4d29-bc44-205a0c37138e"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d315428b-879f-444e-b484-8bb82f27d557"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5826f3f2-895f-4203-923a-93d409c525fb"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e48fc83-95c8-45b7-97fa-2d633c0d9d5f"), NodaTime.Instant.FromUnixTimeTicks(17661621751534507L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.Designer.cs b/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.Designer.cs deleted file mode 100644 index 7c7dba791..000000000 --- a/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.Designer.cs +++ /dev/null @@ -1,3751 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251219202020_AddGoogleAuthAndRefreshTokens")] - partial class AddGoogleAuthAndRefreshTokens - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("52d35d45-48f5-49b4-97e8-fc36f1b738a1"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("c19b3a83-3b6f-4cf7-9888-b5a64fd408b2"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("06a0b286-8390-43f4-83e3-ffd8b7960106"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("a5139761-83cc-45af-9459-de9058e800b5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("85bc06c2-6fa3-4633-8b60-eebc253b052f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("d302744a-637f-4fca-9035-c8066011e770"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("3d26e81e-21ba-4e3a-b591-e487b5de1b61"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("4d0d6574-1b24-4391-98d6-a87d0033b54a"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("787efe87-459f-4606-8aa5-5955a12da478"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("de4ba1b2-c63f-49e9-9e1c-0d96ce0c5013"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("59f36531-ec84-4a6f-88a0-05271309d1f7"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("d127c240-bc31-45a3-aa2b-3d533f5f2c78"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("216c7812-0062-4b4a-8752-67d56c0212f4"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("c163ede7-8cd2-4ef9-b0a6-c62c5f5d3517"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("c93dad6f-d2df-4119-86eb-0ccd313247e2"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("7d4809b6-df13-4837-ba96-4ea04565ac36"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("3a38ab27-1729-490f-8427-121982fb5592"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("7022b9a9-119d-4753-8e22-ccff58393278"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("af456f66-b703-48f1-90ae-c0e6ed13ef5b"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("878e494e-90f9-4378-94a9-195b77523ad9"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("866fe0ba-61cc-4059-864c-3155f8a0aa87"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("06c1e5da-1f53-4fa7-9754-e5a52d51446a"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("6ca65c22-98e2-4cf2-a506-a866947e00f3"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("86560aa8-f2ec-4953-a6a7-22adcb41dd97"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("3ebb3420-53d5-4945-b9cc-b60a7fd93183"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("e0304a3a-a65f-4660-ba31-c0c9ccbea254"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("6b686c2e-5e9b-433f-b67e-d50eb5ef1fb9"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("f0c79460-754c-4b73-9972-c67b96dc787c"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("98373fe9-71d5-49cd-a904-35946ea36028"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("0d8ad397-d3f9-4847-b529-b7ffede853cc"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("931e678e-cfb8-4d7d-8ed1-239008c8e149"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("2f349409-1bea-4ede-8272-fac5605a81ec"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("6645e413-b95a-4b37-86dc-2f1298b3743f"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("56151614-e237-4327-8364-e2320933fb83"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("68a57d3e-95f7-41e6-b057-0d9644c3d073"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7a272fcf-7b46-4c0c-9f4c-1f7e19b6f7d3"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("aa93040f-1b10-452c-9734-0c1121212ea5"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("34367e1a-894d-4903-98ab-55383da7fe09"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("819bd1e0-a4f6-4371-8ee2-203df250a6c6"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("32c184a3-2282-4c08-997c-110ce783ae0b"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("3fe90d66-7ac4-4720-b944-7d39ee983303"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("34eac89e-4ceb-4dae-976d-00c31f4cc75b"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("66e702dd-693d-4ebb-a530-0345ab6eccfe"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("f9fab75c-e663-4a06-93cd-ef01c15d91b3"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("770ba547-f5c7-467f-a766-f592971963e8"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("98fdd199-f32a-4927-8920-9bd20ced0a39"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("5d36d9dc-e52b-4a2e-a1a6-098da3585130"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("3d5a80fa-85fc-4242-87fb-17bc03f4c9c5"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("359c7178-9629-403a-b602-17f8ee71d2fc"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("352f3d40-8211-45f9-bc30-a802845119e3"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("66407cf9-6e47-41c8-bcca-a1f80207fb2c"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("c35c828c-396f-494b-a794-6d271d49f465"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("8a77c0d4-32f3-4499-8aa5-cba974b86b17"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("9bc634aa-6a6c-4d33-815b-71fd44986a9a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("2598d098-23ba-439a-bda4-e5f8ba61ac80"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("866d18f2-51a7-4cbf-a5b8-368439ba3d56"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("0a026619-9466-4f77-b19e-ed37d517f8bd"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("3ca650c4-a138-4c2e-9f68-eb2fe302e9a9"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("3f169ef9-c03e-46a3-a3df-dc72d7b7f294"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("25a6749b-a577-4abd-aba5-61529aa37217"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("9dcec42c-1c4c-4d92-87db-a3ca90702cda"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("59dcfb20-33fa-4660-bd59-865b8e3ea59c"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("6def98f8-91c1-4b92-b668-0e00d803e3a7"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("b61d425a-02c7-4c7a-a1ce-7fe74cfa12d1"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("166358cf-98b3-4599-991b-949ec79cc086"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("c3762cb5-e7c5-4e3c-a6de-9d5466f483f5"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fd8bd01d-8563-4d62-8605-9d961c7bc9b6"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("b7989fab-89cf-4bdb-a369-cea6778b354c"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("8e5e1b0e-604c-4aef-8e61-f74c72e65773"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("c4d27ae5-e2b1-43d7-a89a-152464121886"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("459e2e2b-0950-40ca-ba5f-7445a6cb649d"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("9ca815ae-6698-43ad-a8d3-8982d47c07c4"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("49837505-c529-486d-a53e-5a94950359e7"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("accbb684-6612-4d35-a5bb-c462f0626010"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("adf4e26f-5d0f-41fd-b0bf-ca83e506ca8b"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("62f095b9-58b0-40ca-9dd9-22fccb0ef170"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("39245895-1281-4b37-93b6-2d9ab567a5bc"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("4366519a-899e-486e-8da4-01d5398f7823"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("2e674dcc-2a83-4ab6-8f10-12fc1d4e469e"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("9d2b2a06-b86c-449b-a7a0-c1d55f3ec91f"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("46bef548-a3a2-4e21-ae93-09a45cbb1734"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("265ee3ef-2db3-4454-bdb0-609eb5b3ca3c"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("2775a578-eb8e-4e8e-9016-e8a66688d8cf"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("8f281603-bf6b-461a-95e8-92720fd43402"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("9c96465c-1a22-4515-82b5-9349dc16274f"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("2526f9fb-4b84-4a89-ad5f-8471983ba771"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("74ee5080-68e5-4cfd-8938-c9bd084a839b"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("45f415de-9df5-4165-951f-ae15a563a80d"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("a55ddc04-24ee-4eba-af69-91179c8b560c"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("dbff4182-d9ff-42f1-a5f4-d0f2e6fcb9d7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("06f58319-2089-417a-b09c-909a46024efa"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("ce324e45-5e59-44d5-aedd-81fa49635db4"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("14daf968-4f1b-4733-8c79-ba8b0b1f7df9"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("3b94a3f7-080d-4edf-9f30-5798fc476e12"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("0db1fb15-d52b-4b0e-b8ae-81e38699f305"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("49c84a51-d784-42ed-9f89-c7b6b4086cf8"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("ddb97c94-a789-4151-814c-9bc0aff5dcd6"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("8beeee09-a1e0-40ce-a775-1480ee1327d0"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("2cb0ac68-f60e-4c9f-98a7-5093a199aeb8"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("5fc94445-0829-49c1-87c4-447d32e5ca31"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("b7f331a0-e3c7-4f1d-a767-4888a290799c"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17661756191074044L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.cs b/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.cs deleted file mode 100644 index 1aa353023..000000000 --- a/src/Melodee.Common/Migrations/20251219202020_AddGoogleAuthAndRefreshTokens.cs +++ /dev/null @@ -1,1555 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddGoogleAuthAndRefreshTokens : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "RefreshTokens", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - HashedToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), - TokenFamily = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), - IssuedAt = table.Column(type: "timestamp with time zone", nullable: false), - ExpiresAt = table.Column(type: "timestamp with time zone", nullable: false), - RevokedAt = table.Column(type: "timestamp with time zone", nullable: true), - RevokedReason = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - ReplacedByToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), - SessionStartedAt = table.Column(type: "timestamp with time zone", nullable: false), - DeviceId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - UserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_RefreshTokens", x => x.Id); - table.ForeignKey( - name: "FK_RefreshTokens_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserSocialLogins", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - Provider = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Subject = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Email = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - DisplayName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - HostedDomain = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - LastLoginAt = table.Column(type: "timestamp with time zone", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserSocialLogins", x => x.Id); - table.ForeignKey( - name: "FK_UserSocialLogins_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("52d35d45-48f5-49b4-97e8-fc36f1b738a1"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c19b3a83-3b6f-4cf7-9888-b5a64fd408b2"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06a0b286-8390-43f4-83e3-ffd8b7960106"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5139761-83cc-45af-9459-de9058e800b5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85bc06c2-6fa3-4633-8b60-eebc253b052f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d302744a-637f-4fca-9035-c8066011e770"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d26e81e-21ba-4e3a-b591-e487b5de1b61"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d0d6574-1b24-4391-98d6-a87d0033b54a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("787efe87-459f-4606-8aa5-5955a12da478"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d127c240-bc31-45a3-aa2b-3d533f5f2c78"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d8ad397-d3f9-4847-b529-b7ffede853cc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("931e678e-cfb8-4d7d-8ed1-239008c8e149"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2f349409-1bea-4ede-8272-fac5605a81ec"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6645e413-b95a-4b37-86dc-2f1298b3743f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56151614-e237-4327-8364-e2320933fb83"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68a57d3e-95f7-41e6-b057-0d9644c3d073"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7a272fcf-7b46-4c0c-9f4c-1f7e19b6f7d3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa93040f-1b10-452c-9734-0c1121212ea5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34367e1a-894d-4903-98ab-55383da7fe09"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("819bd1e0-a4f6-4371-8ee2-203df250a6c6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("32c184a3-2282-4c08-997c-110ce783ae0b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3fe90d66-7ac4-4720-b944-7d39ee983303"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34eac89e-4ceb-4dae-976d-00c31f4cc75b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66e702dd-693d-4ebb-a530-0345ab6eccfe"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9fab75c-e663-4a06-93cd-ef01c15d91b3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("770ba547-f5c7-467f-a766-f592971963e8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98fdd199-f32a-4927-8920-9bd20ced0a39"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d36d9dc-e52b-4a2e-a1a6-098da3585130"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d5a80fa-85fc-4242-87fb-17bc03f4c9c5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("359c7178-9629-403a-b602-17f8ee71d2fc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25a6749b-a577-4abd-aba5-61529aa37217"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9dcec42c-1c4c-4d92-87db-a3ca90702cda"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2598d098-23ba-439a-bda4-e5f8ba61ac80"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("866d18f2-51a7-4cbf-a5b8-368439ba3d56"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a026619-9466-4f77-b19e-ed37d517f8bd"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ca650c4-a138-4c2e-9f68-eb2fe302e9a9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f169ef9-c03e-46a3-a3df-dc72d7b7f294"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("866fe0ba-61cc-4059-864c-3155f8a0aa87"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06c1e5da-1f53-4fa7-9754-e5a52d51446a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ca65c22-98e2-4cf2-a506-a866947e00f3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("86560aa8-f2ec-4953-a6a7-22adcb41dd97"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("de4ba1b2-c63f-49e9-9e1c-0d96ce0c5013"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59f36531-ec84-4a6f-88a0-05271309d1f7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e674dcc-2a83-4ab6-8f10-12fc1d4e469e"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d2b2a06-b86c-449b-a7a0-c1d55f3ec91f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("46bef548-a3a2-4e21-ae93-09a45cbb1734"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("265ee3ef-2db3-4454-bdb0-609eb5b3ca3c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2775a578-eb8e-4e8e-9016-e8a66688d8cf"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f281603-bf6b-461a-95e8-92720fd43402"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9c96465c-1a22-4515-82b5-9349dc16274f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("216c7812-0062-4b4a-8752-67d56c0212f4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c163ede7-8cd2-4ef9-b0a6-c62c5f5d3517"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c93dad6f-d2df-4119-86eb-0ccd313247e2"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d4809b6-df13-4837-ba96-4ea04565ac36"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a38ab27-1729-490f-8427-121982fb5592"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7022b9a9-119d-4753-8e22-ccff58393278"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af456f66-b703-48f1-90ae-c0e6ed13ef5b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("878e494e-90f9-4378-94a9-195b77523ad9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ebb3420-53d5-4945-b9cc-b60a7fd93183"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0304a3a-a65f-4660-ba31-c0c9ccbea254"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6b686c2e-5e9b-433f-b67e-d50eb5ef1fb9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0c79460-754c-4b73-9972-c67b96dc787c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98373fe9-71d5-49cd-a904-35946ea36028"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59dcfb20-33fa-4660-bd59-865b8e3ea59c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6def98f8-91c1-4b92-b668-0e00d803e3a7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b61d425a-02c7-4c7a-a1ce-7fe74cfa12d1"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("166358cf-98b3-4599-991b-949ec79cc086"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3762cb5-e7c5-4e3c-a6de-9d5466f483f5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd8bd01d-8563-4d62-8605-9d961c7bc9b6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7989fab-89cf-4bdb-a369-cea6778b354c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e5e1b0e-604c-4aef-8e61-f74c72e65773"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4d27ae5-e2b1-43d7-a89a-152464121886"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("459e2e2b-0950-40ca-ba5f-7445a6cb649d"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ca815ae-6698-43ad-a8d3-8982d47c07c4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49837505-c529-486d-a53e-5a94950359e7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("accbb684-6612-4d35-a5bb-c462f0626010"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("adf4e26f-5d0f-41fd-b0bf-ca83e506ca8b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62f095b9-58b0-40ca-9dd9-22fccb0ef170"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39245895-1281-4b37-93b6-2d9ab567a5bc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4366519a-899e-486e-8da4-01d5398f7823"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dbff4182-d9ff-42f1-a5f4-d0f2e6fcb9d7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06f58319-2089-417a-b09c-909a46024efa"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce324e45-5e59-44d5-aedd-81fa49635db4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("14daf968-4f1b-4733-8c79-ba8b0b1f7df9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b94a3f7-080d-4edf-9f30-5798fc476e12"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0db1fb15-d52b-4b0e-b8ae-81e38699f305"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49c84a51-d784-42ed-9f89-c7b6b4086cf8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2526f9fb-4b84-4a89-ad5f-8471983ba771"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74ee5080-68e5-4cfd-8938-c9bd084a839b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("45f415de-9df5-4165-951f-ae15a563a80d"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a55ddc04-24ee-4eba-af69-91179c8b560c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("352f3d40-8211-45f9-bc30-a802845119e3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66407cf9-6e47-41c8-bcca-a1f80207fb2c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c35c828c-396f-494b-a794-6d271d49f465"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8a77c0d4-32f3-4499-8aa5-cba974b86b17"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9bc634aa-6a6c-4d33-815b-71fd44986a9a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ddb97c94-a789-4151-814c-9bc0aff5dcd6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8beeee09-a1e0-40ce-a775-1480ee1327d0"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2cb0ac68-f60e-4c9f-98a7-5093a199aeb8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5fc94445-0829-49c1-87c4-447d32e5ca31"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7f331a0-e3c7-4f1d-a767-4888a290799c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.CreateIndex( - name: "IX_RefreshTokens_ApiKey", - table: "RefreshTokens", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_RefreshTokens_ExpiresAt", - table: "RefreshTokens", - column: "ExpiresAt"); - - migrationBuilder.CreateIndex( - name: "IX_RefreshTokens_HashedToken", - table: "RefreshTokens", - column: "HashedToken", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_RefreshTokens_TokenFamily", - table: "RefreshTokens", - column: "TokenFamily"); - - migrationBuilder.CreateIndex( - name: "IX_RefreshTokens_UserId", - table: "RefreshTokens", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserSocialLogins_ApiKey", - table: "UserSocialLogins", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserSocialLogins_Provider_Subject", - table: "UserSocialLogins", - columns: new[] { "Provider", "Subject" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserSocialLogins_UserId", - table: "UserSocialLogins", - column: "UserId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "RefreshTokens"); - - migrationBuilder.DropTable( - name: "UserSocialLogins"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e5fafc0-6379-4531-9b14-5aaff47055b0"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5be89c7-cf1d-4451-b607-7893b976c3ee"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4c7a928e-9384-44af-98d3-81e0e277822e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("29642bbf-8d8f-4d00-a3bb-5fa252f56680"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d531cb3d-af6e-4a87-a96e-320a36371336"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2aff0c14-11bc-4c13-9fe1-99dd888de81b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2332eac-9dbf-4e27-b361-f6ce3ee0bf08"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6684a15c-63b3-496c-af80-554632085e0f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ec600fb-629b-4eb1-a171-cc87236fded3"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be000480-fcb6-4307-a622-2eb99c91227d"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("acdcf344-9de9-4d5d-9c8c-b47988ad85b7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0725d3d9-d657-4ffb-b43b-ad7e0f7aa822"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd43bae8-04d1-41ad-b7b7-b6390c10f272"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d307119e-d5d2-4991-956c-e899c0a868ab"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5d1938a-ac98-4f6d-974e-578fa7e86b9c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6080d960-25eb-4469-b3a2-607e681cb48b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b2f6b1ff-cac6-463f-a4d8-334cb17635e3"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea9e2f32-2138-4836-a067-ec46c4c100d6"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c8320e95-ebb5-4aed-8d13-0d3dc31746c5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2dd51106-3302-4091-8a5f-db0cd527fa99"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("604ec997-4d33-4ea4-aaa6-1724e4c5f45a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("916cbff4-1e36-4141-a1c7-0f3ea0745428"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf6d9708-387c-41de-a2f8-17f3bf4f9f71"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85b0fe0b-2c72-4269-8bfd-3a13340bd9e8"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d768e5be-8a26-46ba-9edf-ecff0cfcd2ed"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ddc508c9-7883-4eb9-80af-824aaa1cac8e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7c0c395-f45c-4740-889e-80ecdc8c1892"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56b0fa70-772f-4280-ba35-17462a7761ff"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06da3533-2459-4547-9b36-1a6c55307cbf"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21123452-b9b6-4718-9972-ae1e1070b520"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fe7794e1-03f5-4e4d-a9ef-9989e0fa000e"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69e65ee3-7124-4244-818a-a826e0c9a994"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53306371-bd66-4964-893a-9b10d8124997"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f13f538-783e-4233-9e5b-1683c6657484"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dcd813cc-7684-4a28-9f38-e3fca891d567"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ebe77efc-e379-4c67-a9cb-26bdf9ddcd78"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9673f581-b1e9-4cd4-9d01-ca3aa4a0ebee"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("508275e6-254a-4eae-9d2d-0d1f63b64303"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a3416e0f-e7fe-45dc-9ca6-b31b6f64bd8a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4bacf2cd-12fd-4f96-8ee9-db7fba343b31"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cfc3dfb4-e698-4ba5-b12a-266be3eecca1"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fa0e8f86-c403-45fe-bdd2-526f725c0793"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6cb483dd-b3f4-469b-8035-28b72be329b6"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c62f51c9-6f17-42e6-bd10-1bd93593e233"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5743b45-a247-4f83-93a6-7db88c214b17"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("287807d8-1bdb-41d4-8435-210625156dfe"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f0a3b66-8f13-47b5-a924-b4c6df12a937"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("08111b40-cf22-4072-bb7d-472d569e2a04"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e0a64f1-35e5-4ad5-9138-1474f7f422e5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a72f9352-69ce-4d5c-81c4-2c539384562a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4bb9a6c7-b8fe-46ea-8f2b-ef4ca5a29177"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c339e813-2971-48e7-8123-d258d927ad5f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d44738a7-30c0-4b9e-ba24-0a8cc7252e69"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49d21f0b-bc3e-4fcf-bbdd-8124920ccf44"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a96f9614-423b-441e-8904-8debfc06cd3f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ee0fb26-f6e4-4a11-a72a-977273e01093"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4e1d602-b49e-4093-8386-f0b2fd409d92"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2311842-b54e-46ba-9ad8-13a180c6af8b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ddbaaaa-718b-4c38-9c5e-a8929f8623f4"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a74eab0-62a8-4328-9b27-d804d64082c5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e136442c-d8fb-4f85-bd15-bcf53ea7032c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("559fb90f-536c-4345-9e79-731969c05cae"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7ce2689-aa48-4016-98fb-c5dc17d400e7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d36e5b1d-cfbd-41f1-b5ab-1b7b593a581b"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1937a53-4aba-4496-8d27-0de204813e03"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("022ad5e6-7088-4596-9bc1-f04b04589b19"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ee42872-5e14-42ad-9784-5624cbc97705"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d86ca6eb-d39c-4179-993c-ef4d26f565e2"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("60c34e6c-c969-48d6-9ac5-623878348474"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5559073-6d6a-4320-b075-8875aae152d7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b1874a29-c370-4ef1-9fec-1729706a36e2"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82bd4510-ef8a-41d6-8795-b138ba925a53"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f62d0061-5496-4032-bb00-6b2ff69044a8"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3dc2a534-61d5-4a41-81d8-7e41c6d3e346"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea41f656-8bac-421c-9e42-9764a8195ef1"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4f6469b6-1dc8-4e7d-bde1-00185f66b299"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("18e309c4-14f3-4561-9221-9427f2f89f54"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8eaac2ca-1ca8-481f-9776-42dfe4617270"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9bb529ad-b17a-46c8-ada8-c525071f58b7"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a6ad1fb-af71-4652-b2a0-cf32da6400b9"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("292d86c9-0559-4936-97c4-901c4bd571c9"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8d40ecf7-dd52-4764-98ad-4bebd425db48"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e24c81d7-3641-48af-856b-73e68b92f7ca"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c17b34d-5229-4d0a-87d9-2dd1aa693761"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01b000fc-9565-47ab-b057-429d07d6db2f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c0856aa-a088-48cf-a12a-79803d59cb8c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4707c407-be46-4eba-8066-74008eca2e4c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01dd92b2-58b4-43b9-bcae-2c9fd13ca1f5"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ba6d3605-02f0-4ddd-8921-2f6c6456a2eb"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7fd4fa5b-7234-4252-addd-6ed906ca193f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8788b455-fc65-4e0a-b549-2fb238250076"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("441affae-85a9-4c72-99f6-5ea5e6bbe489"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6756f116-c5f8-4992-9589-ee479d9956e0"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e9e8a325-abec-4247-ba98-e3d8e82f056c"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ea586ab3-668e-4b19-bf3a-32a7efaa0266"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("da382174-e63e-4a45-bb28-380fb0d1c364"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a4a532e-154a-4b3f-a300-b4176afbf938"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51d23237-dae0-4a1e-aadb-52385e6fb432"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a1ca326-d1dc-4ac7-8a0e-25b37ada8757"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ed2a3a2d-d925-4516-b914-eeb72455df8f"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0203b6d-434d-4bf2-97e4-b62cb490c84a"), NodaTime.Instant.FromUnixTimeTicks(17661730176061653L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.Designer.cs b/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.Designer.cs deleted file mode 100644 index dece66d8a..000000000 --- a/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.Designer.cs +++ /dev/null @@ -1,3757 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251221204451_AddNowPlayingFieldsToUserSongPlayHistory")] - partial class AddNowPlayingFieldsToUserSongPlayHistory - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("d31c858a-1040-42a5-ad14-a36a223b707b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("b7fd5b9c-ffa8-4769-bc4f-a31aecefb505"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("e810dbb3-2733-45f2-9908-2952e00b0561"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("c6704ce5-e107-422d-a5dc-6148d68371b9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("2729c92d-69a8-4239-9e02-a5f5ada605d3"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("acda228e-1017-433b-8b38-d85769a2a86e"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("312e56e6-7820-4a71-b855-a78569eff78d"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("b87c894f-58c1-4811-b95b-4b7d3df387c4"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("c1cdb37e-14f7-4326-9ce2-d720ac2f98d7"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("63e45340-51c0-4892-a439-146788bfcee1"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("bd61b556-2235-4a8d-b626-d0c0faf2583f"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("c2720ffa-62f4-4cd5-b2cc-808893a7d302"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("69b439ff-f9dc-463e-a6c5-e6e0b706d68b"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("faecd7aa-db75-4c0a-b115-d311ffba8bad"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("b324885e-603e-449c-8357-67e46873d9a2"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("8340f0eb-9925-46e8-b288-24e1533b7101"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("25351593-5084-4e18-b29f-0f655e35a6b0"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("20b6e6b5-5da2-4a9c-ad59-0a48e6afb750"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("6ea9f249-6353-41d7-a00c-74a55e4830cb"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("dd663df8-fa0c-4b84-9b5e-1deb315e0d43"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("ccebd060-1caa-4a7f-a623-0679cda56154"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("1b59187c-e009-4e4b-b40b-6d5278c0c812"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("39d593b0-aada-427b-9b1e-3f873ed5a45f"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("3c93d298-ad85-40cd-8012-897e3218be07"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("9eab0fbc-581f-45af-9555-fee2179848b2"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("169ee347-ba9e-4efa-8e45-847ffa6cd5ee"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("2a4bcb44-ca77-4ff2-ab8c-f295e984e038"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("09a84ed4-122b-4b39-9a59-337d0f6ecc7e"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("3162363f-175b-44fe-9675-bce45a7a7c06"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("a08fe1f2-c7f1-4f7b-91bf-65e25ef9f1ba"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("2a9b51db-5edf-41a2-9fd8-d9edcfe66379"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("dc083fbf-193c-44e1-9fb8-0c51acfeefaf"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("94e62ecb-204d-4ee0-a991-215c804e5230"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("0b0389b4-5d22-4aa4-880f-c36e69198d2f"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("ec9da394-ba5d-4dff-938c-2325b0e0574c"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("67b58d60-5e98-40bd-a534-92c4dcb1d887"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("b9494afe-9efe-44b9-882a-687eed20faa2"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("14072eb6-f551-49c4-95d4-baa96fbc9eae"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("42a1895f-4e0a-40d6-b073-aca33e6796c4"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("69adb5e6-4a03-41c1-b47c-4d22c0344165"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("0b0785b8-ad99-4422-b0de-44810a0feedc"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("c3e4996a-5ec9-4450-affe-d60c47f8c224"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("a50d5aac-f5cd-4c29-84ef-9b41df290454"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("95567a26-ca33-4bab-9fc8-060b5e5b421a"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("a8028984-1ced-4a0d-8b7f-b23990fe0f31"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("c193974b-c247-468f-85ed-7f5328f4fd1d"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("fd09f21f-3278-4662-a6f2-f449b7ccbb3f"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("a9b17918-ef46-486c-ac79-fff5e485dbd3"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("ede7c8eb-a58e-4de1-b8d5-105a7d7c96f6"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("be22ac84-7223-4703-8871-3169974111d8"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("6438272d-aec3-4c68-83c2-fc8360276964"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("d5ecd96f-29d6-489c-ac16-57c04b62ce9d"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("49494de5-99be-4f6a-96d1-f4a27aa5bb4d"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("e9dc0bfd-a629-4ef7-99d0-32a89f6893aa"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("c0d758ed-d1c8-438d-8d28-41ae3dc1fd96"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("abdbaf83-b933-4977-95b8-59ad20896279"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("6ddc0b5a-54de-429c-a14d-59c432b89b3c"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("82e9e173-e66b-4b0c-9f50-90d49d72de8d"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("db3d885a-924a-4bee-8697-697240f0a0a7"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("ada1655d-f112-42d2-b71d-6fad792412dc"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("9f89cf61-8353-4615-9345-aa96ed1f493e"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("bf5046d9-7d60-4692-b8c7-d9e9747751b0"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("56899be8-6a5d-4448-92d7-6db965ea3920"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("37c95643-50e5-44fd-8bd8-01ba116baf6d"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("78f38c37-9525-4af2-82ff-1f279425b08d"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("04398ec4-49ed-4a43-b262-9305e1a99998"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("53667144-74f8-42f8-8168-cbc5ff4e4c4b"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("92e2fc05-9a0e-4aea-a168-4ff05eb4f25c"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("7dd9ba27-ee2e-4653-a999-e079a4ab6587"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("74549fae-4f0f-47dd-a871-6dc09a1a8f77"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("802f53ca-0edc-4114-8d24-f54c77ffbc58"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("f11d7bbc-9962-41d2-959f-15cccfb745a9"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("cd5cb5d6-6306-4815-9923-f8a95f7d5949"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("bd96c787-eeb3-49cc-bcd8-ecbd3acb9ddf"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("66ce7be6-1c17-440e-bb49-498aacf11669"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("ff6ced31-85a7-4050-98c6-c36e62a6f1e5"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("d6b1caee-a419-485e-ae24-f1eaaa81b3f2"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("713870ee-0643-471e-a74f-cf7a23f05027"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("7c1bc8c6-79e9-4011-9257-11c45c40b5fb"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("e44d3d63-dccd-4d36-addb-d56d06c5605c"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("9e7fcbd7-134b-42c2-a9a6-7ba7cac22c1c"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("8bfa1d8b-10fb-4364-96cc-4c9e53b6554d"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("e5e8cd09-dab3-4460-8cc0-2886727c8c9b"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("5af84a57-0aff-41b4-a3ae-938d18a1e355"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("1f34283f-057e-4386-b994-030d99db95f2"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("32236fcf-83b4-4e4c-b3d3-c39dab13a1b2"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("d63ec08a-f8f3-4cd5-b061-38ee82f15dd4"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("b60635cb-d0bb-4f6c-8295-c4fa720046c1"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("ca7b6557-1373-4430-9a1b-3b6fd05b08b5"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("cf8e5da1-6d13-473c-b94b-6867b3789bbf"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("83ad932f-5682-4e11-ba02-d3d1b446eb2d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("f6dda19e-9cb4-4f2a-b553-023db174c84f"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("07a46f93-e14a-4381-b346-c2b60fe0eb08"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("dc9eda16-58dd-439a-a581-7e3f85764335"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("956e95fd-7279-4217-983a-ecccea11c4e9"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("7c93d311-9925-4da1-88da-ce013767901b"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("d776df74-9b6c-4a95-b6d9-6e56ddb978cc"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("68b2f917-d160-4625-a8b6-45c9c4ac4532"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("849161d8-3bb0-4ca2-b596-59be74a73fe6"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("6a218846-bba0-48c8-829b-a7bda014e850"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("16d47559-4c6a-47cc-9cf3-9b061a120d5a"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17663498909437807L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.cs b/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.cs deleted file mode 100644 index 00ee07447..000000000 --- a/src/Melodee.Common/Migrations/20251221204451_AddNowPlayingFieldsToUserSongPlayHistory.cs +++ /dev/null @@ -1,1454 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddNowPlayingFieldsToUserSongPlayHistory : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "IsNowPlaying", - table: "UserSongPlayHistories", - type: "boolean", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "LastHeartbeatAt", - table: "UserSongPlayHistories", - type: "timestamp with time zone", - nullable: true); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d31c858a-1040-42a5-ad14-a36a223b707b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7fd5b9c-ffa8-4769-bc4f-a31aecefb505"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e810dbb3-2733-45f2-9908-2952e00b0561"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6704ce5-e107-422d-a5dc-6148d68371b9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2729c92d-69a8-4239-9e02-a5f5ada605d3"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("acda228e-1017-433b-8b38-d85769a2a86e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("312e56e6-7820-4a71-b855-a78569eff78d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b87c894f-58c1-4811-b95b-4b7d3df387c4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1cdb37e-14f7-4326-9ce2-d720ac2f98d7"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c2720ffa-62f4-4cd5-b2cc-808893a7d302"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a08fe1f2-c7f1-4f7b-91bf-65e25ef9f1ba"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a9b51db-5edf-41a2-9fd8-d9edcfe66379"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc083fbf-193c-44e1-9fb8-0c51acfeefaf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94e62ecb-204d-4ee0-a991-215c804e5230"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b0389b4-5d22-4aa4-880f-c36e69198d2f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec9da394-ba5d-4dff-938c-2325b0e0574c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67b58d60-5e98-40bd-a534-92c4dcb1d887"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9494afe-9efe-44b9-882a-687eed20faa2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("14072eb6-f551-49c4-95d4-baa96fbc9eae"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("42a1895f-4e0a-40d6-b073-aca33e6796c4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69adb5e6-4a03-41c1-b47c-4d22c0344165"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b0785b8-ad99-4422-b0de-44810a0feedc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3e4996a-5ec9-4450-affe-d60c47f8c224"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a50d5aac-f5cd-4c29-84ef-9b41df290454"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95567a26-ca33-4bab-9fc8-060b5e5b421a"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a8028984-1ced-4a0d-8b7f-b23990fe0f31"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c193974b-c247-468f-85ed-7f5328f4fd1d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd09f21f-3278-4662-a6f2-f449b7ccbb3f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a9b17918-ef46-486c-ac79-fff5e485dbd3"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ede7c8eb-a58e-4de1-b8d5-105a7d7c96f6"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ada1655d-f112-42d2-b71d-6fad792412dc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9f89cf61-8353-4615-9345-aa96ed1f493e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0d758ed-d1c8-438d-8d28-41ae3dc1fd96"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abdbaf83-b933-4977-95b8-59ad20896279"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ddc0b5a-54de-429c-a14d-59c432b89b3c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82e9e173-e66b-4b0c-9f50-90d49d72de8d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("db3d885a-924a-4bee-8697-697240f0a0a7"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ccebd060-1caa-4a7f-a623-0679cda56154"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b59187c-e009-4e4b-b40b-6d5278c0c812"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39d593b0-aada-427b-9b1e-3f873ed5a45f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3c93d298-ad85-40cd-8012-897e3218be07"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("63e45340-51c0-4892-a439-146788bfcee1"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd61b556-2235-4a8d-b626-d0c0faf2583f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c1bc8c6-79e9-4011-9257-11c45c40b5fb"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e44d3d63-dccd-4d36-addb-d56d06c5605c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e7fcbd7-134b-42c2-a9a6-7ba7cac22c1c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8bfa1d8b-10fb-4364-96cc-4c9e53b6554d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5e8cd09-dab3-4460-8cc0-2886727c8c9b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5af84a57-0aff-41b4-a3ae-938d18a1e355"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f34283f-057e-4386-b994-030d99db95f2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69b439ff-f9dc-463e-a6c5-e6e0b706d68b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("faecd7aa-db75-4c0a-b115-d311ffba8bad"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b324885e-603e-449c-8357-67e46873d9a2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8340f0eb-9925-46e8-b288-24e1533b7101"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25351593-5084-4e18-b29f-0f655e35a6b0"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("20b6e6b5-5da2-4a9c-ad59-0a48e6afb750"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ea9f249-6353-41d7-a00c-74a55e4830cb"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd663df8-fa0c-4b84-9b5e-1deb315e0d43"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9eab0fbc-581f-45af-9555-fee2179848b2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("169ee347-ba9e-4efa-8e45-847ffa6cd5ee"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a4bcb44-ca77-4ff2-ab8c-f295e984e038"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("09a84ed4-122b-4b39-9a59-337d0f6ecc7e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3162363f-175b-44fe-9675-bce45a7a7c06"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf5046d9-7d60-4692-b8c7-d9e9747751b0"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56899be8-6a5d-4448-92d7-6db965ea3920"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("37c95643-50e5-44fd-8bd8-01ba116baf6d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78f38c37-9525-4af2-82ff-1f279425b08d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04398ec4-49ed-4a43-b262-9305e1a99998"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53667144-74f8-42f8-8168-cbc5ff4e4c4b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("92e2fc05-9a0e-4aea-a168-4ff05eb4f25c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7dd9ba27-ee2e-4653-a999-e079a4ab6587"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74549fae-4f0f-47dd-a871-6dc09a1a8f77"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("802f53ca-0edc-4114-8d24-f54c77ffbc58"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f11d7bbc-9962-41d2-959f-15cccfb745a9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cd5cb5d6-6306-4815-9923-f8a95f7d5949"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd96c787-eeb3-49cc-bcd8-ecbd3acb9ddf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66ce7be6-1c17-440e-bb49-498aacf11669"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff6ced31-85a7-4050-98c6-c36e62a6f1e5"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d6b1caee-a419-485e-ae24-f1eaaa81b3f2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("713870ee-0643-471e-a74f-cf7a23f05027"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf8e5da1-6d13-473c-b94b-6867b3789bbf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("83ad932f-5682-4e11-ba02-d3d1b446eb2d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f6dda19e-9cb4-4f2a-b553-023db174c84f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("07a46f93-e14a-4381-b346-c2b60fe0eb08"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc9eda16-58dd-439a-a581-7e3f85764335"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("956e95fd-7279-4217-983a-ecccea11c4e9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c93d311-9925-4da1-88da-ce013767901b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("32236fcf-83b4-4e4c-b3d3-c39dab13a1b2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d63ec08a-f8f3-4cd5-b061-38ee82f15dd4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b60635cb-d0bb-4f6c-8295-c4fa720046c1"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca7b6557-1373-4430-9a1b-3b6fd05b08b5"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be22ac84-7223-4703-8871-3169974111d8"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6438272d-aec3-4c68-83c2-fc8360276964"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5ecd96f-29d6-489c-ac16-57c04b62ce9d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49494de5-99be-4f6a-96d1-f4a27aa5bb4d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e9dc0bfd-a629-4ef7-99d0-32a89f6893aa"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d776df74-9b6c-4a95-b6d9-6e56ddb978cc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b2f917-d160-4625-a8b6-45c9c4ac4532"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("849161d8-3bb0-4ca2-b596-59be74a73fe6"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a218846-bba0-48c8-829b-a7bda014e850"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("16d47559-4c6a-47cc-9cf3-9b061a120d5a"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "IsNowPlaying", - table: "UserSongPlayHistories"); - - migrationBuilder.DropColumn( - name: "LastHeartbeatAt", - table: "UserSongPlayHistories"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("52d35d45-48f5-49b4-97e8-fc36f1b738a1"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c19b3a83-3b6f-4cf7-9888-b5a64fd408b2"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06a0b286-8390-43f4-83e3-ffd8b7960106"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5139761-83cc-45af-9459-de9058e800b5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("85bc06c2-6fa3-4633-8b60-eebc253b052f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d302744a-637f-4fca-9035-c8066011e770"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d26e81e-21ba-4e3a-b591-e487b5de1b61"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4d0d6574-1b24-4391-98d6-a87d0033b54a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("787efe87-459f-4606-8aa5-5955a12da478"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d127c240-bc31-45a3-aa2b-3d533f5f2c78"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0d8ad397-d3f9-4847-b529-b7ffede853cc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("931e678e-cfb8-4d7d-8ed1-239008c8e149"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2f349409-1bea-4ede-8272-fac5605a81ec"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6645e413-b95a-4b37-86dc-2f1298b3743f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56151614-e237-4327-8364-e2320933fb83"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68a57d3e-95f7-41e6-b057-0d9644c3d073"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7a272fcf-7b46-4c0c-9f4c-1f7e19b6f7d3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aa93040f-1b10-452c-9734-0c1121212ea5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34367e1a-894d-4903-98ab-55383da7fe09"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("819bd1e0-a4f6-4371-8ee2-203df250a6c6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("32c184a3-2282-4c08-997c-110ce783ae0b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3fe90d66-7ac4-4720-b944-7d39ee983303"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("34eac89e-4ceb-4dae-976d-00c31f4cc75b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66e702dd-693d-4ebb-a530-0345ab6eccfe"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9fab75c-e663-4a06-93cd-ef01c15d91b3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("770ba547-f5c7-467f-a766-f592971963e8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98fdd199-f32a-4927-8920-9bd20ced0a39"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5d36d9dc-e52b-4a2e-a1a6-098da3585130"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3d5a80fa-85fc-4242-87fb-17bc03f4c9c5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("359c7178-9629-403a-b602-17f8ee71d2fc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25a6749b-a577-4abd-aba5-61529aa37217"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9dcec42c-1c4c-4d92-87db-a3ca90702cda"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2598d098-23ba-439a-bda4-e5f8ba61ac80"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("866d18f2-51a7-4cbf-a5b8-368439ba3d56"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0a026619-9466-4f77-b19e-ed37d517f8bd"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ca650c4-a138-4c2e-9f68-eb2fe302e9a9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3f169ef9-c03e-46a3-a3df-dc72d7b7f294"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("866fe0ba-61cc-4059-864c-3155f8a0aa87"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06c1e5da-1f53-4fa7-9754-e5a52d51446a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ca65c22-98e2-4cf2-a506-a866947e00f3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("86560aa8-f2ec-4953-a6a7-22adcb41dd97"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("de4ba1b2-c63f-49e9-9e1c-0d96ce0c5013"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59f36531-ec84-4a6f-88a0-05271309d1f7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e674dcc-2a83-4ab6-8f10-12fc1d4e469e"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9d2b2a06-b86c-449b-a7a0-c1d55f3ec91f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("46bef548-a3a2-4e21-ae93-09a45cbb1734"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("265ee3ef-2db3-4454-bdb0-609eb5b3ca3c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2775a578-eb8e-4e8e-9016-e8a66688d8cf"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f281603-bf6b-461a-95e8-92720fd43402"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9c96465c-1a22-4515-82b5-9349dc16274f"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("216c7812-0062-4b4a-8752-67d56c0212f4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c163ede7-8cd2-4ef9-b0a6-c62c5f5d3517"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c93dad6f-d2df-4119-86eb-0ccd313247e2"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d4809b6-df13-4837-ba96-4ea04565ac36"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a38ab27-1729-490f-8427-121982fb5592"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7022b9a9-119d-4753-8e22-ccff58393278"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("af456f66-b703-48f1-90ae-c0e6ed13ef5b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("878e494e-90f9-4378-94a9-195b77523ad9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ebb3420-53d5-4945-b9cc-b60a7fd93183"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0304a3a-a65f-4660-ba31-c0c9ccbea254"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6b686c2e-5e9b-433f-b67e-d50eb5ef1fb9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0c79460-754c-4b73-9972-c67b96dc787c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98373fe9-71d5-49cd-a904-35946ea36028"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("59dcfb20-33fa-4660-bd59-865b8e3ea59c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6def98f8-91c1-4b92-b668-0e00d803e3a7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b61d425a-02c7-4c7a-a1ce-7fe74cfa12d1"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("166358cf-98b3-4599-991b-949ec79cc086"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3762cb5-e7c5-4e3c-a6de-9d5466f483f5"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd8bd01d-8563-4d62-8605-9d961c7bc9b6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7989fab-89cf-4bdb-a369-cea6778b354c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8e5e1b0e-604c-4aef-8e61-f74c72e65773"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4d27ae5-e2b1-43d7-a89a-152464121886"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("459e2e2b-0950-40ca-ba5f-7445a6cb649d"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ca815ae-6698-43ad-a8d3-8982d47c07c4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49837505-c529-486d-a53e-5a94950359e7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("accbb684-6612-4d35-a5bb-c462f0626010"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("adf4e26f-5d0f-41fd-b0bf-ca83e506ca8b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("62f095b9-58b0-40ca-9dd9-22fccb0ef170"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39245895-1281-4b37-93b6-2d9ab567a5bc"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4366519a-899e-486e-8da4-01d5398f7823"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dbff4182-d9ff-42f1-a5f4-d0f2e6fcb9d7"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("06f58319-2089-417a-b09c-909a46024efa"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce324e45-5e59-44d5-aedd-81fa49635db4"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("14daf968-4f1b-4733-8c79-ba8b0b1f7df9"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b94a3f7-080d-4edf-9f30-5798fc476e12"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0db1fb15-d52b-4b0e-b8ae-81e38699f305"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49c84a51-d784-42ed-9f89-c7b6b4086cf8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2526f9fb-4b84-4a89-ad5f-8471983ba771"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74ee5080-68e5-4cfd-8938-c9bd084a839b"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("45f415de-9df5-4165-951f-ae15a563a80d"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a55ddc04-24ee-4eba-af69-91179c8b560c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("352f3d40-8211-45f9-bc30-a802845119e3"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66407cf9-6e47-41c8-bcca-a1f80207fb2c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c35c828c-396f-494b-a794-6d271d49f465"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8a77c0d4-32f3-4499-8aa5-cba974b86b17"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9bc634aa-6a6c-4d33-815b-71fd44986a9a"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ddb97c94-a789-4151-814c-9bc0aff5dcd6"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8beeee09-a1e0-40ce-a775-1480ee1327d0"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2cb0ac68-f60e-4c9f-98a7-5093a199aeb8"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5fc94445-0829-49c1-87c4-447d32e5ca31"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7f331a0-e3c7-4f1d-a767-4888a290799c"), NodaTime.Instant.FromUnixTimeTicks(17661756191074044L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.Designer.cs b/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.Designer.cs deleted file mode 100644 index fcd2a42c6..000000000 --- a/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.Designer.cs +++ /dev/null @@ -1,3923 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251223212247_AddCuratedAlbumCharts")] - partial class AddCuratedAlbumCharts - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("2b7fa178-88a1-4e65-bfdb-5754cd135d11"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("78908ed2-d6cc-49fa-b92f-b78284b47313"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("de0462ec-cf30-42f5-8900-5fd8e5dc7efb"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("4385ba5f-44c9-4336-bbb1-007f1a53814f"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("47a51d2e-68c1-4de3-b85e-c2ee0f9991d1"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("b15ac59e-c889-43e7-830f-f6c8c168e684"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("e1a92361-4db6-414f-bcb7-33e2af1c4f48"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("6e0d8c6c-330a-4740-a7ce-20e38bed57f8"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("528d1c45-68c1-4d0b-ac15-602f52af971b"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("0b27d614-24a2-4e85-95a9-7c4dbf671023"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("03ab9596-21ec-4967-9874-fa3b14bab58d"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("a14fdf87-e73e-4d54-9023-845747d382a4"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("9ab4e545-3428-4b7d-a99a-75abbfd98758"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("3b41288f-ee44-4061-b637-8c8f6d2cbcf4"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("e8a0c703-3bbc-47bc-bc96-22e04bb6e0ec"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("81afb29f-1677-4e14-91e1-fdc3e2badfc4"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("c5798e57-124f-4147-b703-e2bae9032c48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("160b553d-a1b9-4503-b3aa-358f3ee79dcd"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("f4ec54de-59bb-4f9a-a3d5-fe38f0264410"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("8557730a-5e67-4020-8f42-874ff36056fe"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("73646ce7-04be-4781-aae0-9e202ffe14dd"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("9b49c08a-2bb3-4e94-ad83-15f71a873c53"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("a039716a-e011-4748-82ac-04febf161f8f"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("5f9de0aa-8803-4269-9d01-c8d2f557b932"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("3bdec0f1-8831-4d84-8921-efa46c0bb758"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9917564f-1f5f-49ad-a70d-ba3caddf79db"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("ae5e6033-cb43-4d1c-809b-e4237911fade"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("8ba2a697-4fd0-4ea1-8837-e800864239fd"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("840e3ead-48c0-45e6-8a19-5f9521c2ddcd"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("a5efbb07-c164-42ec-9506-19d4d6e341dd"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("33adfa3e-0bf1-421e-80c6-1e0181e58a0d"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("38bf9a78-4a00-40ee-9501-bad0e7074f83"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("6e080d77-5e92-460e-878f-bd6f04846448"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("49303275-2575-47f9-b1a2-fd2ff829152e"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("395cde49-0cd1-4b90-a042-28553efb5336"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("dd6b584c-19c9-4ab4-9674-132479ce48ae"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("70e6832c-437c-4a8c-8187-e9d7ddf0b527"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("bce057e0-b51e-4a55-85c3-f79533ded572"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("7326069f-c498-45e0-9445-fabc9a44593f"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("98dd968b-34a7-41f1-b43b-71841467f22a"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("e1c9f4aa-1012-4c94-8822-f82d4dccb255"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("4497a402-a98c-4498-b24f-dd781d4b46b2"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("4cdf36cf-68d1-4f58-bcb0-d673fa94491a"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("a57679e0-fa3d-4d7e-8970-430bb376965b"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("61d0a9ee-3693-4a1d-91b1-b503f9c44a17"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("1df0faf4-a6b3-4416-8b6c-27c585635c70"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("b428b348-078a-4fcf-9f11-73fd0770c5cb"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("90d1343b-d385-4765-a76f-cf4b91f323b7"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("b138b9af-75d1-4318-9185-ccd4274188ec"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("66510176-7167-4d11-ac7d-e2b63d4f9aaa"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("fab284d3-0b66-4f6a-b903-423eef9ef8ec"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("152c3b8e-e947-452c-886e-f7927fbf0e20"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("76895d12-efdf-4a65-a460-966a13a1c0b1"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("019844ce-a892-49e2-9376-6500d8eec81c"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("168df76d-04f7-4aec-8dc1-ed8e7c97c768"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("05413b1a-44eb-4f32-a7c0-7a1514f424af"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 102, - ApiKey = new Guid("b63297b0-af57-439d-bbad-64bfebd78194"), - Category = 1, - Comment = "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.version", - SortOrder = 0, - Value = "1.0.1" - }, - new - { - Id = 103, - ApiKey = new Guid("53839be7-a219-44e2-bcd8-a04ecc1b902e"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("09d2eeb7-a8a6-46e5-b06c-673b48b07cde"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("4459e9d4-ed75-495f-a8da-f90a587cedb3"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("df7d2ed7-402e-4f77-9864-f3a8ae8c52f6"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("54f7b8ff-d41f-45fa-817a-b0caf7fdb6dc"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("e242aaca-e390-4f05-9e20-f43c288c7f52"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("e00af932-2990-4637-a8a7-a26a6cc87b1e"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("02b8d12c-11d6-4c53-bb8f-cd331b857a82"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("0df0a907-aba8-401d-bf98-ca50226db55e"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("ded55c08-34d4-486a-9c15-b7242ded53bd"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("0cb3bdd9-d1e5-409f-bf7f-f325101142b2"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("8c36f0bc-14d4-4afb-86e0-ce1bb18ea421"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("487cfd4f-3bb1-4031-bf28-c2e6bb014f22"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("80f180d6-e5b9-43b8-adf4-39ac92c1174f"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("63e293fd-eaf4-481e-b644-82da75b08bc2"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("d3aa43af-a9da-458e-bfd3-a36ebd7fc00a"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("fec36b40-24f8-49e8-9b99-a5ef51680b19"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("98ad56a7-ad64-4e0a-a4bf-8420c90796b9"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("849187a1-9edc-45b2-84d0-ea57049cef9d"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("7095c602-09c3-4aaa-b509-37b35c2b77b6"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("7ceb5084-e617-4b7e-be0c-1aaa879609e9"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("38d993fd-9ad9-4415-a8b7-3412f55a04af"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("99e6e655-79c4-49db-ba9a-3eb3c99a0926"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("2ab46df1-4cd0-43f8-a8fb-35d15fb48555"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("0e5d424f-9dce-4e90-8f0e-db607b96b4b3"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("76f7aec2-b4ce-4939-a92a-fbecf6526817"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("620a737f-fbf9-48ae-8973-612394549b24"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("cfe457cb-6454-4b8a-a7ab-599c0ddc2ca3"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("342473ec-c4bc-4d1e-ab2b-e95be227c949"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("fda3b090-cf44-435e-b359-4cd0e8789bdf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("76aa79c1-51ab-46fc-afff-f2a7b30d92fa"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("947a596d-2f39-46ad-b3e4-6d3400bd730d"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("2c2bdfb4-3b64-4d25-919d-622dcde06477"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("e65156e6-d343-4115-a6b8-06b2734e0650"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("8691d936-e229-42b8-9201-a584b7c94466"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("858f63b8-3cb3-42e0-a3bd-889d6208997e"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("75e5428d-d24d-4431-8f72-554ee073f059"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("3ece7a17-a24e-4c4b-8db9-f4302004bc6f"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("17234fbb-90c5-4242-9a66-b18d303f9473"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("939ba694-a466-436c-804b-c075b798ac48"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("c9f8fe05-99f3-4c1d-a584-3e34bcedabc4"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("8756c3c3-4bc5-4c84-835b-935eead473fa"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("343866c9-23f1-4a0b-82ca-f69c212331b7"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("d310bd1e-de6a-4f2f-8e63-7cfdc4933fc7"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17665249660317879L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.cs b/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.cs deleted file mode 100644 index 3d8706903..000000000 --- a/src/Melodee.Common/Migrations/20251223212247_AddCuratedAlbumCharts.cs +++ /dev/null @@ -1,1542 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddCuratedAlbumCharts : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Charts", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - SourceName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - SourceUrl = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - Year = table.Column(type: "integer", nullable: true), - IsVisible = table.Column(type: "boolean", nullable: false), - IsGeneratedPlaylistEnabled = table.Column(type: "boolean", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Charts", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ChartItems", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ChartId = table.Column(type: "integer", nullable: false), - Rank = table.Column(type: "integer", nullable: false), - ArtistName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - AlbumTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ReleaseYear = table.Column(type: "integer", nullable: true), - LinkedArtistId = table.Column(type: "integer", nullable: true), - LinkedAlbumId = table.Column(type: "integer", nullable: true), - LinkStatus = table.Column(type: "smallint", nullable: false), - LinkConfidence = table.Column(type: "numeric", nullable: true), - LinkNotes = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ChartItems", x => x.Id); - table.ForeignKey( - name: "FK_ChartItems_Albums_LinkedAlbumId", - column: x => x.LinkedAlbumId, - principalTable: "Albums", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_ChartItems_Artists_LinkedArtistId", - column: x => x.LinkedArtistId, - principalTable: "Artists", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_ChartItems_Charts_ChartId", - column: x => x.ChartId, - principalTable: "Charts", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2b7fa178-88a1-4e65-bfdb-5754cd135d11"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78908ed2-d6cc-49fa-b92f-b78284b47313"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("de0462ec-cf30-42f5-8900-5fd8e5dc7efb"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4385ba5f-44c9-4336-bbb1-007f1a53814f"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("47a51d2e-68c1-4de3-b85e-c2ee0f9991d1"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b15ac59e-c889-43e7-830f-f6c8c168e684"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e1a92361-4db6-414f-bcb7-33e2af1c4f48"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6e0d8c6c-330a-4740-a7ce-20e38bed57f8"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("528d1c45-68c1-4d0b-ac15-602f52af971b"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a14fdf87-e73e-4d54-9023-845747d382a4"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a5efbb07-c164-42ec-9506-19d4d6e341dd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("33adfa3e-0bf1-421e-80c6-1e0181e58a0d"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("38bf9a78-4a00-40ee-9501-bad0e7074f83"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6e080d77-5e92-460e-878f-bd6f04846448"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49303275-2575-47f9-b1a2-fd2ff829152e"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("395cde49-0cd1-4b90-a042-28553efb5336"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd6b584c-19c9-4ab4-9674-132479ce48ae"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70e6832c-437c-4a8c-8187-e9d7ddf0b527"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bce057e0-b51e-4a55-85c3-f79533ded572"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7326069f-c498-45e0-9445-fabc9a44593f"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98dd968b-34a7-41f1-b43b-71841467f22a"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e1c9f4aa-1012-4c94-8822-f82d4dccb255"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4497a402-a98c-4498-b24f-dd781d4b46b2"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4cdf36cf-68d1-4f58-bcb0-d673fa94491a"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a57679e0-fa3d-4d7e-8970-430bb376965b"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("61d0a9ee-3693-4a1d-91b1-b503f9c44a17"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1df0faf4-a6b3-4416-8b6c-27c585635c70"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b428b348-078a-4fcf-9f11-73fd0770c5cb"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("90d1343b-d385-4765-a76f-cf4b91f323b7"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b138b9af-75d1-4318-9185-ccd4274188ec"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4459e9d4-ed75-495f-a8da-f90a587cedb3"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("df7d2ed7-402e-4f77-9864-f3a8ae8c52f6"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("168df76d-04f7-4aec-8dc1-ed8e7c97c768"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("05413b1a-44eb-4f32-a7c0-7a1514f424af"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b63297b0-af57-439d-bbad-64bfebd78194"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53839be7-a219-44e2-bcd8-a04ecc1b902e"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("09d2eeb7-a8a6-46e5-b06c-673b48b07cde"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("73646ce7-04be-4781-aae0-9e202ffe14dd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9b49c08a-2bb3-4e94-ad83-15f71a873c53"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a039716a-e011-4748-82ac-04febf161f8f"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5f9de0aa-8803-4269-9d01-c8d2f557b932"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b27d614-24a2-4e85-95a9-7c4dbf671023"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("03ab9596-21ec-4967-9874-fa3b14bab58d"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("38d993fd-9ad9-4415-a8b7-3412f55a04af"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("99e6e655-79c4-49db-ba9a-3eb3c99a0926"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ab46df1-4cd0-43f8-a8fb-35d15fb48555"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0e5d424f-9dce-4e90-8f0e-db607b96b4b3"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("76f7aec2-b4ce-4939-a92a-fbecf6526817"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("620a737f-fbf9-48ae-8973-612394549b24"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cfe457cb-6454-4b8a-a7ab-599c0ddc2ca3"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ab4e545-3428-4b7d-a99a-75abbfd98758"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3b41288f-ee44-4061-b637-8c8f6d2cbcf4"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e8a0c703-3bbc-47bc-bc96-22e04bb6e0ec"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81afb29f-1677-4e14-91e1-fdc3e2badfc4"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5798e57-124f-4147-b703-e2bae9032c48"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("160b553d-a1b9-4503-b3aa-358f3ee79dcd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f4ec54de-59bb-4f9a-a3d5-fe38f0264410"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8557730a-5e67-4020-8f42-874ff36056fe"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3bdec0f1-8831-4d84-8921-efa46c0bb758"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9917564f-1f5f-49ad-a70d-ba3caddf79db"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae5e6033-cb43-4d1c-809b-e4237911fade"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ba2a697-4fd0-4ea1-8837-e800864239fd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("840e3ead-48c0-45e6-8a19-5f9521c2ddcd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54f7b8ff-d41f-45fa-817a-b0caf7fdb6dc"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e242aaca-e390-4f05-9e20-f43c288c7f52"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e00af932-2990-4637-a8a7-a26a6cc87b1e"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("02b8d12c-11d6-4c53-bb8f-cd331b857a82"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0df0a907-aba8-401d-bf98-ca50226db55e"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ded55c08-34d4-486a-9c15-b7242ded53bd"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0cb3bdd9-d1e5-409f-bf7f-f325101142b2"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8c36f0bc-14d4-4afb-86e0-ce1bb18ea421"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("487cfd4f-3bb1-4031-bf28-c2e6bb014f22"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("80f180d6-e5b9-43b8-adf4-39ac92c1174f"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("63e293fd-eaf4-481e-b644-82da75b08bc2"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d3aa43af-a9da-458e-bfd3-a36ebd7fc00a"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fec36b40-24f8-49e8-9b99-a5ef51680b19"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98ad56a7-ad64-4e0a-a4bf-8420c90796b9"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("849187a1-9edc-45b2-84d0-ea57049cef9d"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7095c602-09c3-4aaa-b509-37b35c2b77b6"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7ceb5084-e617-4b7e-be0c-1aaa879609e9"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2c2bdfb4-3b64-4d25-919d-622dcde06477"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e65156e6-d343-4115-a6b8-06b2734e0650"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8691d936-e229-42b8-9201-a584b7c94466"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("858f63b8-3cb3-42e0-a3bd-889d6208997e"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("75e5428d-d24d-4431-8f72-554ee073f059"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ece7a17-a24e-4c4b-8db9-f4302004bc6f"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("17234fbb-90c5-4242-9a66-b18d303f9473"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("342473ec-c4bc-4d1e-ab2b-e95be227c949"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fda3b090-cf44-435e-b359-4cd0e8789bdf"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("76aa79c1-51ab-46fc-afff-f2a7b30d92fa"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("947a596d-2f39-46ad-b3e4-6d3400bd730d"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66510176-7167-4d11-ac7d-e2b63d4f9aaa"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fab284d3-0b66-4f6a-b903-423eef9ef8ec"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("152c3b8e-e947-452c-886e-f7927fbf0e20"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("76895d12-efdf-4a65-a460-966a13a1c0b1"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("019844ce-a892-49e2-9376-6500d8eec81c"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("939ba694-a466-436c-804b-c075b798ac48"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c9f8fe05-99f3-4c1d-a584-3e34bcedabc4"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8756c3c3-4bc5-4c84-835b-935eead473fa"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("343866c9-23f1-4a0b-82ca-f69c212331b7"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d310bd1e-de6a-4f2f-8e63-7cfdc4933fc7"), NodaTime.Instant.FromUnixTimeTicks(17665249660317879L) }); - - migrationBuilder.CreateIndex( - name: "IX_ChartItems_ChartId_LinkedAlbumId", - table: "ChartItems", - columns: new[] { "ChartId", "LinkedAlbumId" }); - - migrationBuilder.CreateIndex( - name: "IX_ChartItems_ChartId_Rank", - table: "ChartItems", - columns: new[] { "ChartId", "Rank" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_ChartItems_LinkedAlbumId", - table: "ChartItems", - column: "LinkedAlbumId"); - - migrationBuilder.CreateIndex( - name: "IX_ChartItems_LinkedArtistId", - table: "ChartItems", - column: "LinkedArtistId"); - - migrationBuilder.CreateIndex( - name: "IX_Charts_ApiKey", - table: "Charts", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Charts_Slug", - table: "Charts", - column: "Slug", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ChartItems"); - - migrationBuilder.DropTable( - name: "Charts"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d31c858a-1040-42a5-ad14-a36a223b707b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b7fd5b9c-ffa8-4769-bc4f-a31aecefb505"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e810dbb3-2733-45f2-9908-2952e00b0561"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c6704ce5-e107-422d-a5dc-6148d68371b9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2729c92d-69a8-4239-9e02-a5f5ada605d3"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("acda228e-1017-433b-8b38-d85769a2a86e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("312e56e6-7820-4a71-b855-a78569eff78d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b87c894f-58c1-4811-b95b-4b7d3df387c4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c1cdb37e-14f7-4326-9ce2-d720ac2f98d7"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c2720ffa-62f4-4cd5-b2cc-808893a7d302"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a08fe1f2-c7f1-4f7b-91bf-65e25ef9f1ba"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a9b51db-5edf-41a2-9fd8-d9edcfe66379"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc083fbf-193c-44e1-9fb8-0c51acfeefaf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94e62ecb-204d-4ee0-a991-215c804e5230"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b0389b4-5d22-4aa4-880f-c36e69198d2f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ec9da394-ba5d-4dff-938c-2325b0e0574c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67b58d60-5e98-40bd-a534-92c4dcb1d887"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9494afe-9efe-44b9-882a-687eed20faa2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("14072eb6-f551-49c4-95d4-baa96fbc9eae"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("42a1895f-4e0a-40d6-b073-aca33e6796c4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69adb5e6-4a03-41c1-b47c-4d22c0344165"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0b0785b8-ad99-4422-b0de-44810a0feedc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3e4996a-5ec9-4450-affe-d60c47f8c224"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a50d5aac-f5cd-4c29-84ef-9b41df290454"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95567a26-ca33-4bab-9fc8-060b5e5b421a"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a8028984-1ced-4a0d-8b7f-b23990fe0f31"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c193974b-c247-468f-85ed-7f5328f4fd1d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd09f21f-3278-4662-a6f2-f449b7ccbb3f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a9b17918-ef46-486c-ac79-fff5e485dbd3"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ede7c8eb-a58e-4de1-b8d5-105a7d7c96f6"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ada1655d-f112-42d2-b71d-6fad792412dc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9f89cf61-8353-4615-9345-aa96ed1f493e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0d758ed-d1c8-438d-8d28-41ae3dc1fd96"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("abdbaf83-b933-4977-95b8-59ad20896279"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ddc0b5a-54de-429c-a14d-59c432b89b3c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("82e9e173-e66b-4b0c-9f50-90d49d72de8d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("db3d885a-924a-4bee-8697-697240f0a0a7"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ccebd060-1caa-4a7f-a623-0679cda56154"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1b59187c-e009-4e4b-b40b-6d5278c0c812"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39d593b0-aada-427b-9b1e-3f873ed5a45f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3c93d298-ad85-40cd-8012-897e3218be07"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("63e45340-51c0-4892-a439-146788bfcee1"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd61b556-2235-4a8d-b626-d0c0faf2583f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c1bc8c6-79e9-4011-9257-11c45c40b5fb"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e44d3d63-dccd-4d36-addb-d56d06c5605c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9e7fcbd7-134b-42c2-a9a6-7ba7cac22c1c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8bfa1d8b-10fb-4364-96cc-4c9e53b6554d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5e8cd09-dab3-4460-8cc0-2886727c8c9b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5af84a57-0aff-41b4-a3ae-938d18a1e355"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1f34283f-057e-4386-b994-030d99db95f2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("69b439ff-f9dc-463e-a6c5-e6e0b706d68b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("faecd7aa-db75-4c0a-b115-d311ffba8bad"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b324885e-603e-449c-8357-67e46873d9a2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8340f0eb-9925-46e8-b288-24e1533b7101"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("25351593-5084-4e18-b29f-0f655e35a6b0"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("20b6e6b5-5da2-4a9c-ad59-0a48e6afb750"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6ea9f249-6353-41d7-a00c-74a55e4830cb"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dd663df8-fa0c-4b84-9b5e-1deb315e0d43"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9eab0fbc-581f-45af-9555-fee2179848b2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("169ee347-ba9e-4efa-8e45-847ffa6cd5ee"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2a4bcb44-ca77-4ff2-ab8c-f295e984e038"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("09a84ed4-122b-4b39-9a59-337d0f6ecc7e"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3162363f-175b-44fe-9675-bce45a7a7c06"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bf5046d9-7d60-4692-b8c7-d9e9747751b0"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56899be8-6a5d-4448-92d7-6db965ea3920"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("37c95643-50e5-44fd-8bd8-01ba116baf6d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("78f38c37-9525-4af2-82ff-1f279425b08d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04398ec4-49ed-4a43-b262-9305e1a99998"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53667144-74f8-42f8-8168-cbc5ff4e4c4b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("92e2fc05-9a0e-4aea-a168-4ff05eb4f25c"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7dd9ba27-ee2e-4653-a999-e079a4ab6587"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("74549fae-4f0f-47dd-a871-6dc09a1a8f77"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("802f53ca-0edc-4114-8d24-f54c77ffbc58"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f11d7bbc-9962-41d2-959f-15cccfb745a9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cd5cb5d6-6306-4815-9923-f8a95f7d5949"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd96c787-eeb3-49cc-bcd8-ecbd3acb9ddf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("66ce7be6-1c17-440e-bb49-498aacf11669"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ff6ced31-85a7-4050-98c6-c36e62a6f1e5"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d6b1caee-a419-485e-ae24-f1eaaa81b3f2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("713870ee-0643-471e-a74f-cf7a23f05027"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf8e5da1-6d13-473c-b94b-6867b3789bbf"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("83ad932f-5682-4e11-ba02-d3d1b446eb2d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f6dda19e-9cb4-4f2a-b553-023db174c84f"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("07a46f93-e14a-4381-b346-c2b60fe0eb08"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dc9eda16-58dd-439a-a581-7e3f85764335"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("956e95fd-7279-4217-983a-ecccea11c4e9"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c93d311-9925-4da1-88da-ce013767901b"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("32236fcf-83b4-4e4c-b3d3-c39dab13a1b2"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d63ec08a-f8f3-4cd5-b061-38ee82f15dd4"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b60635cb-d0bb-4f6c-8295-c4fa720046c1"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ca7b6557-1373-4430-9a1b-3b6fd05b08b5"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be22ac84-7223-4703-8871-3169974111d8"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6438272d-aec3-4c68-83c2-fc8360276964"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d5ecd96f-29d6-489c-ac16-57c04b62ce9d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("49494de5-99be-4f6a-96d1-f4a27aa5bb4d"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e9dc0bfd-a629-4ef7-99d0-32a89f6893aa"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d776df74-9b6c-4a95-b6d9-6e56ddb978cc"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("68b2f917-d160-4625-a8b6-45c9c4ac4532"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("849161d8-3bb0-4ca2-b596-59be74a73fe6"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6a218846-bba0-48c8-829b-a7bda014e850"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("16d47559-4c6a-47cc-9cf3-9b061a120d5a"), NodaTime.Instant.FromUnixTimeTicks(17663498909437807L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251224193814_RemoveOpenSubsonicServerVersionSetting.cs b/src/Melodee.Common/Migrations/20251224193814_RemoveOpenSubsonicServerVersionSetting.cs deleted file mode 100644 index 96311536a..000000000 --- a/src/Melodee.Common/Migrations/20251224193814_RemoveOpenSubsonicServerVersionSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class RemoveOpenSubsonicServerVersionSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 102); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 102, new Guid("1ece978d-9447-4058-919c-39592a74276c"), 1, "OpenSubsonic server actual version. [Ex: 1.2.3 (beta)]", NodaTime.Instant.FromUnixTimeTicks(17389554776280915L), null, false, "openSubsonicServer.openSubsonicServer.version", null, null, 0, null, "1.0.1" }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.Designer.cs b/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.Designer.cs deleted file mode 100644 index 7c08d4d77..000000000 --- a/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.Designer.cs +++ /dev/null @@ -1,3923 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251225140151_AddChartUpdateJobCronSetting")] - partial class AddChartUpdateJobCronSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("ea8ddc26-7f8a-447b-907b-02e06f4abfdf"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("9c008de7-e0b7-4d3f-ba93-211b0b25d09b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("65c03a82-1e42-4511-a94a-ea20161a440c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("2874781c-e86f-446e-a388-254a02fa5ec6"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("48cc1cba-9f4e-4084-b4b1-f6e741479d3b"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("dcd86164-c769-41c0-ad85-0facf28b3776"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("206383a4-b7cd-4a57-b2ca-8b3605a83fd2"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("446c4241-edfb-48f7-90cb-499bd353476a"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("ce1991d7-9e38-4579-ac6f-05e1f5cd070e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("934dc980-50b2-40be-bfe1-4688041c77a9"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("219a3886-c6be-4b6a-a44b-fa52d5e49bda"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("bd94209a-7d8b-42ad-8b2c-c50e5ad684e1"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("e185f32d-40c2-4161-ae05-827d6a6d36f3"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("42f63ac6-0090-4b6c-b8e9-fd10f4493637"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("559dbcba-5aad-4c56-a165-081ad0116f81"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("3849d615-b2b8-4236-bf58-541d0ff142c3"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("8201f855-5c29-40ff-9b51-6bd15832c24b"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("b29576ad-89e9-460a-a4a1-5b8ea5fdb9e2"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("cd4a9fdc-e73b-44b9-bd77-41031cfcbe19"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("14ad16de-68c2-4ae6-9787-ed1214b384fd"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e14695a8-3112-4868-b999-c0180500ebe2"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("3550e541-c01c-4613-800e-74f638336550"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("6e576384-2375-46ff-9ccc-090d8671f927"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("8268ea4e-a1d1-4e17-b5ad-2dcf94dd6015"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("e9eac02f-2431-46d8-91ba-af26d25f6549"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("ac13fa87-1a5c-41a2-9b76-f26992c64fb5"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("e3f92539-dba6-4122-be16-a895de5ab81b"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("db081197-857d-42cf-94ad-6058c1cf9210"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("fc41201c-186e-4a37-91ec-041f61b779d1"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("c11974fc-3ff0-4ef6-aeac-867471990860"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("806cf3be-3af0-44b5-8c5a-913423848ae3"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("84c6d6b3-ad6d-49e4-9077-290521e45413"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("d7122268-4905-44be-a926-1294cc0236c4"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d02e36a7-bae4-47cc-965a-c6e807b58237"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("10243f59-ff55-4212-bfda-80afdabe7c1c"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("f033afe0-1998-4cdb-af4b-1cc52b31e2c3"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("9e3bb2af-0a01-42bd-98d5-8768eec27495"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("7a5dcb8b-723f-428d-83af-967c589f9746"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("823b5e9f-2c20-449c-aef7-d147fe6833b0"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("c5f37936-01ad-450d-b8a1-16286e141a38"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("7a90e7b2-e753-4a43-9693-fad01a4845e0"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("fff43cb8-8678-480a-a815-97bde98fa5c7"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("a71b840b-39cd-4deb-a1c2-b3ca5ff79789"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("2bf87238-6e08-420d-baa6-3b12481d6df7"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("cdcdfcef-ca16-4d63-95f1-13b5676697cc"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("5e7d3ddd-2a53-4344-b14b-2b5b315c2251"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("d3c252b5-d1de-4a0c-8192-d51d94682130"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("91a906da-26c2-4699-b1b6-c4017ff640ef"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("5f93ed77-a1ef-4add-82f0-68df9acae413"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("86038e94-ea70-40aa-a86b-2c936662cea8"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("e70f359d-b0e2-49ec-85ff-7156ddde5d57"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("8166013f-5d5f-4994-bf17-ad7dcc2693f4"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b0fd4d72-bef7-4adf-994e-0726f958a804"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("27ef6eec-a92f-4906-b667-17df63c41992"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("869593a1-fae8-4745-90ca-7b789616f141"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("aba5dd2b-b745-483e-aa70-6833d78a6b7d"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("73870487-6ffb-441a-92e4-c89647379644"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("2f929b7f-b999-4e17-b6ca-fc34fdc8735d"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("7d2ffb03-c143-4b9e-a2f7-566c7ab8aa4b"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("d9611522-9891-4fde-bc00-7236dfc21d85"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("af9f0d31-87bc-4d39-b67b-d89b801388c6"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("19cecbc0-f902-4e03-b4ad-2c5ea4330e63"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("04a034f5-6fc8-4ded-92e9-4f5063018de6"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("cd3e8665-75be-4b87-8c96-8650ac28caad"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("cda8d2fc-2bac-4abd-80db-fcb7fc2859fb"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("14279f3c-ee10-4b15-8ada-0d45773a46e8"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("d2327955-ab45-41fa-b598-fdab67ddaf06"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("f503724d-272e-42d6-b267-cfbbebbb7d81"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("9fff5c56-7f2b-4679-929a-d51d7b3abe12"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("23936f81-1aaf-41e8-88de-0ef009653451"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("2248146b-61ab-4d07-9a61-9f29aa56bd9b"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("d888114d-f83a-46a5-bbe3-bdcae40f56d3"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("2ba7f8c2-7560-4f59-993f-fa443c97a92e"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("b57609b5-ab39-4f7c-8958-c0255bf092f9"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("7333af95-eed5-45bf-b5f8-d234df3b2c88"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("803d8df3-2a01-4599-92b2-f1ab5c6c8880"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de49d2f0-4685-45d6-8b90-415fda1e91c5"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("6b9ab4c2-2b21-449b-a2b0-1b9fcc9ca631"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("63f9c8ae-0565-4b9d-b85b-f0b296271fa6"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("2c554b98-5c9e-427b-89c0-240c9f6a4ab7"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("75127e2a-4103-4f78-9d92-913ee55f5e64"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("2cb5dae6-da3d-4118-8680-38d28ec21ede"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("f2bc9161-203f-4568-88bb-f3726041ee51"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("ab9bf23e-d7fc-47b5-a8e7-19231926069e"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("892c7201-4c7a-4ad0-b255-9a64d7659076"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("6adcb941-8e55-4de2-8c5f-c1e321e42393"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("b6074cb1-547a-4e35-9068-13257dc4becf"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("4cf5f6cc-d518-4a1e-a32a-27658ce8ce7f"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("3c5e8b1a-3faa-464d-905c-54d8f545ca10"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("90c30519-a9a0-4d46-a39d-1b159a7d9989"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("661470d1-c91a-45de-84fb-470045040f46"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("9caf3831-8d42-4ee4-8f04-67119a358e35"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("00deebf2-f2a2-44a7-88e7-e9eb61990bd0"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("5e31afc5-edea-40e8-b2db-7b52bd15ab85"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("047cf6db-e41c-4b20-a8ff-431c2f954c39"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("5be221da-e63a-4ec7-b4f2-b284a1b4a8da"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("3528501b-ab64-479d-a917-cb9f4bb22f55"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("28920dc3-820e-4915-bf29-04e790f3f9c8"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("67aae7c7-0002-4c12-a625-7a688457b448"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("c9acfa21-aae5-4332-a4b9-10053e7d6109"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("5163b103-1991-47b1-b095-736b2ec7bb2b"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.cs b/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.cs deleted file mode 100644 index 29d37cf90..000000000 --- a/src/Melodee.Common/Migrations/20251225140151_AddChartUpdateJobCronSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddChartUpdateJobCronSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { new Guid("5163b103-1991-47b1-b095-736b2ec7bb2b"), 14, "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(17666713099655591L), null, false, "jobs.chartUpdate.cronExpression", null, null, 0, null, "0 0 2 * * ?" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "ApiKey", - keyValue: new Guid("5163b103-1991-47b1-b095-736b2ec7bb2b")); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.Designer.cs b/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.Designer.cs deleted file mode 100644 index af1901a8a..000000000 --- a/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.Designer.cs +++ /dev/null @@ -1,3935 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251225143200_AddStagingAutoMoveJobCronSetting")] - partial class AddStagingAutoMoveJobCronSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("75606f0b-454d-4664-ad34-18c0c14425d7"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("7215a5b8-62b8-43d6-975e-6dbba50984c9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("be013b41-6145-436f-be39-830ce26045fd"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("f55b11ee-736c-4403-b312-a44d3a92c5a5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("05e1d601-4405-4f92-a362-3f09dcaf5bef"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("16f5be68-2a5e-4afe-b7bf-3b1d95d1ce72"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("2a351e37-a133-47d3-9ef6-dbe836b0a1ed"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a5f7bf4-bbc2-4a7e-afe2-f44f2e27229b"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("46b37649-0307-41bb-a209-f3a8d3c9e318"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("31238932-1ace-481a-96ce-7d925aff84fd"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("30f850bb-3f38-49e5-99c9-6a712595b0d8"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("5bd07296-97fd-4a2a-9ebd-360bc0b855d5"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("77cefc18-03d3-46cd-8d81-aa6114ca5899"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("48ba53d9-9872-48dc-b7cd-017d8e91b8c3"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("b96bff27-2c38-48fd-abec-e09bb4dc99d7"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("5052e2e0-def0-4d52-a1d2-72adbec1a34e"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("aad8a26f-4429-499c-9a09-ee2706574a34"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("e8cedec1-03b4-4754-bfb7-6ea48ffed40f"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("af36d794-a461-4a8d-bfde-d55d59593ec8"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("167a0ad2-b1e6-48e8-b880-ae19d3889b3a"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e359af84-c73f-488d-a9de-367c6794e3dd"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("14165e9f-cddb-48ca-805f-f8f5528f9758"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("4d8f7945-202c-4878-a6fe-fd6f670c3e58"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("513aed22-97fd-4472-89cc-8d9639745a03"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("50bf5ea7-ff5f-455f-b0bf-8b89aa6d6f2a"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("1fb34599-28d0-4b1f-b45e-0f6a9cd02353"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("1ed9fe7f-2c4f-41e8-a3fa-41c6fea18ae5"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("d87ffdc7-9b24-49e0-a17e-13182bda8c1e"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("a9b85f68-4dfb-4d2f-a192-8dd4310521de"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("1daea6c3-940f-4ba7-89c1-2b1588c2b251"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("d5a573aa-9d5c-4e2f-9a88-a1bc8e24f2ef"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("587c480f-1c6e-44ae-8cf3-3410a4a1522c"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("66a062d2-ef95-4f1a-b80e-c4afab01a448"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("f75cc694-4446-4724-a64b-8db69bfd9708"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1c39453c-31fa-4480-891b-518aa4d7b941"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("272425a5-ae69-478d-b35d-8f32219578fd"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("e2b7398f-66c9-4445-afe8-229dad19d11b"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("c0217068-d7ee-4411-9545-05a2acdae328"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("1885590a-e75f-45f3-a018-cf580c40e68a"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("e350450c-566d-42e3-9bec-2d3cd1646394"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("9ec82f91-7786-41ec-8899-52d4c89c0ed3"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("524cf007-6f32-4ca8-93b7-833c3853bd25"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("ce671dc9-1f2f-4493-8395-aff05507c679"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("3988cccd-3604-4962-86e5-d2d3d9684aef"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("18d38624-349f-4d92-aae3-a3481f0b5ea3"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("fca4e31b-d8e3-49cd-9b97-cd7b4a3c43b0"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("c33080e0-1766-46ec-a9d0-b3e767f5f9af"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("f7289a42-b383-4b9b-8414-63830991937e"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("75540d3e-72ea-4d97-a988-4bebee559f27"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("f1e009d9-3aa7-40ad-a35a-bfd1ffae9e75"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("878a4e0b-7237-47d3-b2cb-ac854a488054"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("d976436d-0234-4e5f-9a49-82c490ffd3c2"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b02d5751-a03d-46b4-b0ab-ebe5e5ad27b4"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("964008c4-f688-4b4f-8247-da90204dab26"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("341a1e91-7bc5-4d1b-987c-c5925aae6616"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("a5e9a356-38b0-47a9-8fde-eedb9ae35a4a"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("16702226-b74b-48a8-80a5-8af813ca5993"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8a8a5be8-950d-4921-ae29-7126fe3121bd"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("e73fe4a8-cabb-405e-903f-52ea54486eb2"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("f917d8de-2e88-4a9e-b121-b5ad9522e581"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1de8ae15-a97e-40d2-9814-b950f87a6a4b"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("09c0b6e0-3769-4b45-ae56-ef03a52782bf"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("b25fcca5-ed1f-4093-ab82-b27026408c1d"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("f611cc30-e494-40c2-b30a-f238609f9fa2"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("74d31471-d76b-466e-9ffe-47bec6447d25"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("4269c30e-4e61-48ae-9436-92cc5bdd6d21"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("e6b94d98-9067-4393-a9b3-947d20f62ece"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("c14be5e7-2201-4fa6-a600-87ef0a1d873b"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("21ddd29a-ac2c-499a-970c-dc92e869ee25"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("4891ba74-28a2-46fb-ac41-053eeadc080e"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("39ba5626-48d5-454d-99c5-67c3930afcd1"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("23452dc2-2ff0-4788-8b8b-468cae61282d"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("f0a5c060-ff75-4e64-8c2f-316554dd3391"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("1b9a73ca-821a-46b0-934f-82f319d2100f"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a8d4e65a-1cfb-4443-a6a9-a24dbde4f792"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("075814a0-6398-4d49-a1de-2d38403b06af"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("142b53b4-a404-44ee-87f8-db39073668b3"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("e07ef6f3-5746-493d-9786-e5f1a2e1b6d3"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("ff6f6fc5-af28-42f6-9697-4fbb042d1f84"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("c3cde2ee-000a-40ef-902f-e9a4a8189faf"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("d0a7ee4b-af96-4ba1-87d7-15006899f7f1"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("0bb16945-6606-4494-acf2-d6d08f5aaae7"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("8e55936e-b8c7-45ca-adc9-7acb340675f5"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("2d4942fa-726d-445d-9907-440bc1ae8294"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("df1b9c0b-7bc4-468f-882c-a68cee60ca78"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("fc18dc6f-602a-4c9e-b7b4-5c8c8457a47f"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("2e63e398-794d-47d6-8cff-e10004b29352"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("81b2a096-f84b-4d77-a0f5-b2ec79a1dfe1"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("5e7afe64-76a9-4924-9260-48a955ed4c67"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("c9a75755-0539-42cd-83e5-c119fa556f0e"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("b577e779-6794-4e27-999d-4f26d8aceca3"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("64789b76-77fd-443d-aa1e-1bbbd745a22f"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("5f4862f8-e736-495a-9c32-3939ce2b82e0"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("889a3709-648e-418e-a6c2-ded42c646e9b"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("e64d13bf-bc17-4d37-83df-7478bde38ac6"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("6571f377-53cb-4caf-8d88-287b6d18ab7f"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("1c685e85-ea07-431d-a73b-7c68f35a94bc"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("610fbdeb-1605-4441-9297-a3a95c628018"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("2274fb4b-ca84-4e14-9df0-a158583b10c8"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("580a8c14-a5d9-4c03-b2c6-642309f9c2ca"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("da3586af-c07a-4312-abb2-c1984b1c88d8"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("8ac2b01f-d88b-4a48-9a60-75dbf213ad94"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.cs b/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.cs deleted file mode 100644 index 8c2fbb937..000000000 --- a/src/Melodee.Common/Migrations/20251225143200_AddStagingAutoMoveJobCronSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddStagingAutoMoveJobCronSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { new Guid("8ac2b01f-d88b-4a48-9a60-75dbf213ad94"), 14, "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", NodaTime.Instant.FromUnixTimeTicks(17666731196080941L), null, false, "jobs.stagingAutoMove.cronExpression", null, null, 0, null, "0 */15 * * * ?" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "ApiKey", - keyValue: new Guid("8ac2b01f-d88b-4a48-9a60-75dbf213ad94")); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.Designer.cs b/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.Designer.cs deleted file mode 100644 index 2d2411e81..000000000 --- a/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.Designer.cs +++ /dev/null @@ -1,3976 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251225231035_AddJobHistoryTable")] - partial class AddJobHistoryTable - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("ab86e6a3-8db7-45f8-96c5-4c8c24aad02c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("bbe1e77c-4926-4651-8f99-339076ce3071"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("c3e8d097-f6cb-4433-a0c4-1027af3f4d48"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("01151aa8-e5ca-4080-abbc-d00de25dd71e"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("8b43556f-f837-4eb5-8772-9195640d1ec9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("812c68b7-dbbd-445a-9a6d-27c8b92652b0"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("87334367-dde9-436f-b70d-221c0f545f75"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("8ccda668-846a-42b1-bb99-e6669333ba46"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("2b666643-9c50-406f-b41e-982a28ce016b"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("6fee39e9-66bd-439f-b294-d4d6089a8776"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("e5e7237f-25af-4eb8-95cb-36de42cbde13"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("c2277087-7e24-4aa1-a38e-adfde1fe17d1"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("9c24aff8-fbd1-4a0c-9538-35d56d8add13"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("b56c049c-5e14-499f-9a61-034955f2f29e"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("94565548-5f7c-4496-932a-a3b74c16cdf0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("916e4478-8124-4d62-8279-7e5441964080"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("39d5e825-67d8-4c7e-9f56-26f35511162c"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("10c11922-b1c5-4c62-aaa4-c22df6c1998d"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("1d972398-17ce-4740-8536-70742bd48cec"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("d9a5f081-e7e1-4fee-a437-a8e245c89b0c"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("400d174b-d536-470b-88b6-f8caae0c51c2"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("2e06445c-abab-46ca-8d50-bf681ecb373f"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("95c26b5d-d4db-40d2-a003-232d3cfb1a39"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("cc4bfc27-d7a8-4a87-98f5-dcdc644cf6fa"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("2727e201-55ed-4bd6-b821-c772ad05f8ad"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("fce88900-b3b0-4daf-9604-3dfad8ae951a"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("99406981-0a94-4f45-8f18-9be0c5e2c0fa"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("3a672b19-4d42-45a6-aa5c-6b0a37163a9b"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("d617562a-bee9-4e43-b321-e0cfbf6eca7d"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("b2dc208c-2faf-47ea-a53b-f678df13a69a"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("df2b5ff7-5e4f-495f-a888-e345263400c3"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("7c4cbce4-9a51-4c9c-8a4a-8143d0caa2d9"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("cb5c6bdc-e1bc-44c8-a8b3-b00952327731"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("04b42977-1df6-43ef-9e2d-14b1e7749f70"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("277f8792-2728-4ccf-b6ed-7ee248d9fe6e"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("2912734e-fc72-4c90-9f4f-08266470416d"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("c10673aa-3368-4a67-a2a1-8f96496ad316"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("a7124ff8-2175-4af9-891c-236cb2e084a3"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("cafdadc1-9a54-4e14-a888-e1194ce03216"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("92cb6779-ae09-4dfd-b592-0f34dfa113a6"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("1656aa25-6832-47ba-a31a-ff20812ccba4"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("81b42fa4-115b-4852-879c-8f8b75934b9b"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("3a80ce82-af97-4f90-84d7-cdcac41f1a0a"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("21360186-a13d-414b-a577-b62c4ccbd196"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("d7dfcefb-0ed3-466d-89a7-ede56a3a2161"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("f1ae95f5-d448-49d9-a49d-a33eddf4c2a1"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("ce8e5366-1b72-4b0c-9e10-f93ca5e2063c"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("32e932fb-34b0-4470-863b-ea16bfe62409"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("e5ccbd15-f27a-4402-9aaf-f5f57523507c"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("337b7a70-279c-4459-b9a7-1c10dc916397"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("a446f7f0-b32c-4180-b345-5696f1eb80b2"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("548b3311-c33c-4a73-b9d6-75497e0992e9"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("67c66af6-8c6b-4306-aa1a-f44a977a08d9"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("3c68bd13-1447-44c2-80bd-7356ae30e644"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("01132001-65fa-4a01-8fe8-69e829a21156"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("ae3ac120-574c-45ae-8ac3-7d9c0fac23f9"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("2f243faf-62f1-4566-8db4-fb17a4ab5eea"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("bc2e6a24-55fb-4fa9-a1b4-5fc7f341213c"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("e4b61432-5f00-4706-8e9c-c93b4887b542"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("3afc6313-c6fa-4163-9746-211c3ae74558"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("aff2dbc4-f035-45d4-b507-d7d6538ac362"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("a4af1fab-7485-4c70-97a6-d1162122aa25"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("4ce3fbe0-28e6-475b-9517-3c30e2faabc5"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("e9e2c056-6e5c-4087-b3b6-53e8ba8c22e1"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("53e50386-b221-4b2b-b263-2b42fb40d633"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("e5fe6aad-8ea6-4521-8ebc-550a227bf0d7"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("c98eb942-590f-45ad-9b25-01f44233c0fe"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("c7581f24-4468-4136-b701-b370ae946373"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("23c0b18a-468d-4215-8ab9-bba4379a9242"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("6adb2ff3-d348-47cb-8740-96bc6069ef73"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("1dff0f47-1ec9-4836-9923-4b15fd26b9b2"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("91d3f41e-c87f-470c-9c31-f442029b83c2"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("c0090921-bfe2-4b82-b0ae-fba8b6a36d1e"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("d54d265d-414a-4a8f-bcc0-708430163f08"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("9632bf02-4689-4ac1-b7f3-a7ce4d0de022"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("031f214c-2fd0-46e0-959d-837eb1e0d3b7"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("ae4359fd-ba3d-4fca-a9a3-9cc7f8e39887"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("51dea999-3be8-4ba0-81fb-d1d7952a4214"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("a658cb29-fb20-45a9-b07a-f240c9417d5d"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("54f9d081-6f86-45a2-892b-3c83a82e977b"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("321f5c3f-824e-4424-818b-005e450b0cd1"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("6fa93a6e-e959-4b2c-a7d8-e471beb9182a"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("98f810d2-af4b-42fb-9158-9371c52b50a7"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("be6e6b26-f789-4331-a92c-a2b77a6b7ae8"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("797f3f97-d85d-4728-98f1-41cdeb6065ed"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("714aabff-108e-4fd8-83e8-66c96d97542a"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("393e5946-293c-4168-b0aa-717ec47b8055"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("fb34b9fd-1275-4f2c-83be-1bb939650207"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("633fe582-6ff8-4499-af23-6f45e9f38655"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("1d419475-8dc1-41da-8a37-a56532327139"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("867d066d-6104-4672-a96e-e66b89ee448d"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("1e5d2fb4-04a0-4bf8-9c2d-727ff2720c37"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("6e7cefe5-1895-4425-a8b7-b011d5f16c13"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("a2a79efb-6800-4980-862b-dcac276e7c4b"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("edcc74f7-e598-489f-b408-c7f68ba1d751"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("f0f838a6-8e06-435e-8177-a866c8f7a14b"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("a7ed03fa-4916-4db7-8699-c79d3428f96c"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("de683364-6a70-4410-94f9-e3d8fcc779cd"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("e5fd9d95-1fb3-421f-b060-16eb105f64df"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("bbb229b3-02d2-4ba9-ad5d-3bac81b0630d"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("a1b23e0b-cb89-4923-a1e2-ccab9bd925eb"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("76000339-6630-4c2b-97a8-b8c9061d80e0"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(17667042347640456L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.cs b/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.cs deleted file mode 100644 index edde49694..000000000 --- a/src/Melodee.Common/Migrations/20251225231035_AddJobHistoryTable.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddJobHistoryTable : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "JobHistories", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - JobName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - StartedAt = table.Column(type: "timestamp with time zone", nullable: false), - CompletedAt = table.Column(type: "timestamp with time zone", nullable: true), - DurationInMs = table.Column(type: "double precision", nullable: true), - Success = table.Column(type: "boolean", nullable: false), - ErrorMessage = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - WasManualTrigger = table.Column(type: "boolean", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_JobHistories", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_JobHistories_JobName_StartedAt", - table: "JobHistories", - columns: new[] { "JobName", "StartedAt" }); - - migrationBuilder.CreateIndex( - name: "IX_JobHistories_StartedAt", - table: "JobHistories", - column: "StartedAt"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "JobHistories"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.Designer.cs b/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.Designer.cs deleted file mode 100644 index d8ced1bc1..000000000 --- a/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.Designer.cs +++ /dev/null @@ -1,4298 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251226174655_AddRequestTables")] - partial class AddRequestTables - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.cs b/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.cs deleted file mode 100644 index 9af3aa1ca..000000000 --- a/src/Melodee.Common/Migrations/20251226174655_AddRequestTables.cs +++ /dev/null @@ -1,1699 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddRequestTables : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Requests", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ApiKey = table.Column(type: "uuid", nullable: false), - Category = table.Column(type: "integer", nullable: false), - Status = table.Column(type: "integer", nullable: false), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: false), - ArtistName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - TargetArtistApiKey = table.Column(type: "uuid", nullable: true), - AlbumTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - TargetAlbumApiKey = table.Column(type: "uuid", nullable: true), - SongTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - TargetSongApiKey = table.Column(type: "uuid", nullable: true), - ReleaseYear = table.Column(type: "integer", nullable: true), - ExternalUrl = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - Notes = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - CreatedByUserId = table.Column(type: "integer", nullable: false), - UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false), - UpdatedByUserId = table.Column(type: "integer", nullable: false), - LastActivityAt = table.Column(type: "timestamp with time zone", nullable: false), - LastActivityUserId = table.Column(type: "integer", nullable: true), - LastActivityType = table.Column(type: "integer", nullable: false), - ArtistNameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - AlbumTitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - SongTitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - DescriptionNormalized = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Requests", x => x.Id); - table.ForeignKey( - name: "FK_Requests_Users_CreatedByUserId", - column: x => x.CreatedByUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - table.ForeignKey( - name: "FK_Requests_Users_LastActivityUserId", - column: x => x.LastActivityUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_Requests_Users_UpdatedByUserId", - column: x => x.UpdatedByUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "RequestComments", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ApiKey = table.Column(type: "uuid", nullable: false), - RequestId = table.Column(type: "integer", nullable: false), - ParentCommentId = table.Column(type: "integer", nullable: true), - Body = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: false), - IsSystem = table.Column(type: "boolean", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - CreatedByUserId = table.Column(type: "integer", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_RequestComments", x => x.Id); - table.ForeignKey( - name: "FK_RequestComments_RequestComments_ParentCommentId", - column: x => x.ParentCommentId, - principalTable: "RequestComments", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RequestComments_Requests_RequestId", - column: x => x.RequestId, - principalTable: "Requests", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RequestComments_Users_CreatedByUserId", - column: x => x.CreatedByUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }); - - migrationBuilder.CreateTable( - name: "RequestParticipants", - columns: table => new - { - RequestId = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "integer", nullable: false), - IsCreator = table.Column(type: "boolean", nullable: false), - IsCommenter = table.Column(type: "boolean", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_RequestParticipants", x => new { x.RequestId, x.UserId }); - table.ForeignKey( - name: "FK_RequestParticipants_Requests_RequestId", - column: x => x.RequestId, - principalTable: "Requests", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RequestParticipants_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "RequestUserStates", - columns: table => new - { - RequestId = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "integer", nullable: false), - LastSeenAt = table.Column(type: "timestamp with time zone", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_RequestUserStates", x => new { x.RequestId, x.UserId }); - table.ForeignKey( - name: "FK_RequestUserStates_Requests_RequestId", - column: x => x.RequestId, - principalTable: "Requests", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RequestUserStates_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("277e8907-d170-780d-816d-92111e007606"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4f830df7-7942-6353-1d84-946f271c084e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4f7e266-d355-e402-865f-da369963cc03"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e999453e-9193-fbfe-a533-ab541773943e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7464b039-de31-f876-5731-46ce62500117"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("798d3376-ff64-b590-f204-c46bef35339a"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), NodaTime.Instant.FromUnixTimeTicks(0L) }); - - migrationBuilder.CreateIndex( - name: "IX_RequestComments_ApiKey", - table: "RequestComments", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_RequestComments_CreatedByUserId", - table: "RequestComments", - column: "CreatedByUserId"); - - migrationBuilder.CreateIndex( - name: "IX_RequestComments_ParentCommentId", - table: "RequestComments", - column: "ParentCommentId"); - - migrationBuilder.CreateIndex( - name: "IX_RequestComments_RequestId_CreatedAt_Id", - table: "RequestComments", - columns: new[] { "RequestId", "CreatedAt", "Id" }); - - migrationBuilder.CreateIndex( - name: "IX_RequestComments_RequestId_ParentCommentId_CreatedAt_Id", - table: "RequestComments", - columns: new[] { "RequestId", "ParentCommentId", "CreatedAt", "Id" }); - - migrationBuilder.CreateIndex( - name: "IX_RequestParticipants_UserId_RequestId", - table: "RequestParticipants", - columns: new[] { "UserId", "RequestId" }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_ApiKey", - table: "Requests", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Requests_CreatedAt_Id", - table: "Requests", - columns: new[] { "CreatedAt", "Id" }, - descending: new bool[0]); - - migrationBuilder.CreateIndex( - name: "IX_Requests_CreatedByUserId_CreatedAt_Id", - table: "Requests", - columns: new[] { "CreatedByUserId", "CreatedAt", "Id" }, - descending: new[] { false, true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_LastActivityAt_Id", - table: "Requests", - columns: new[] { "LastActivityAt", "Id" }, - descending: new bool[0]); - - migrationBuilder.CreateIndex( - name: "IX_Requests_LastActivityUserId", - table: "Requests", - column: "LastActivityUserId"); - - migrationBuilder.CreateIndex( - name: "IX_Requests_Status_CreatedAt_Id", - table: "Requests", - columns: new[] { "Status", "CreatedAt", "Id" }, - descending: new[] { false, true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_Status_CreatedByUserId_CreatedAt_Id", - table: "Requests", - columns: new[] { "Status", "CreatedByUserId", "CreatedAt", "Id" }, - descending: new[] { false, false, true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_TargetAlbumApiKey_CreatedAt_Id", - table: "Requests", - columns: new[] { "TargetAlbumApiKey", "CreatedAt", "Id" }, - descending: new[] { false, true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_TargetArtistApiKey_CreatedAt_Id", - table: "Requests", - columns: new[] { "TargetArtistApiKey", "CreatedAt", "Id" }, - descending: new[] { false, true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_UpdatedByUserId", - table: "Requests", - column: "UpdatedByUserId"); - - migrationBuilder.CreateIndex( - name: "IX_RequestUserStates_UserId_LastSeenAt", - table: "RequestUserStates", - columns: new[] { "UserId", "LastSeenAt" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "RequestComments"); - - migrationBuilder.DropTable( - name: "RequestParticipants"); - - migrationBuilder.DropTable( - name: "RequestUserStates"); - - migrationBuilder.DropTable( - name: "Requests"); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ab86e6a3-8db7-45f8-96c5-4c8c24aad02c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bbe1e77c-4926-4651-8f99-339076ce3071"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 3, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c3e8d097-f6cb-4433-a0c4-1027af3f4d48"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01151aa8-e5ca-4080-abbc-d00de25dd71e"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 5, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8b43556f-f837-4eb5-8772-9195640d1ec9"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("812c68b7-dbbd-445a-9a6d-27c8b92652b0"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 2, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("87334367-dde9-436f-b70d-221c0f545f75"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 4, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("8ccda668-846a-42b1-bb99-e6669333ba46"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 6, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2b666643-9c50-406f-b41e-982a28ce016b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 9, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c2277087-7e24-4aa1-a38e-adfde1fe17d1"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 26, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b2dc208c-2faf-47ea-a53b-f678df13a69a"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 27, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("df2b5ff7-5e4f-495f-a888-e345263400c3"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 28, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("7c4cbce4-9a51-4c9c-8a4a-8143d0caa2d9"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 29, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cb5c6bdc-e1bc-44c8-a8b3-b00952327731"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 30, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("04b42977-1df6-43ef-9e2d-14b1e7749f70"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 32, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("277f8792-2728-4ccf-b6ed-7ee248d9fe6e"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 34, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2912734e-fc72-4c90-9f4f-08266470416d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 35, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c10673aa-3368-4a67-a2a1-8f96496ad316"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 36, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7124ff8-2175-4af9-891c-236cb2e084a3"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 37, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cafdadc1-9a54-4e14-a888-e1194ce03216"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 38, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("92cb6779-ae09-4dfd-b592-0f34dfa113a6"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 39, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1656aa25-6832-47ba-a31a-ff20812ccba4"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 41, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("81b42fa4-115b-4852-879c-8f8b75934b9b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 42, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a80ce82-af97-4f90-84d7-cdcac41f1a0a"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 43, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("21360186-a13d-414b-a577-b62c4ccbd196"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 45, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d7dfcefb-0ed3-466d-89a7-ede56a3a2161"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 46, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f1ae95f5-d448-49d9-a49d-a33eddf4c2a1"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 47, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ce8e5366-1b72-4b0c-9e10-f93ca5e2063c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 49, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("32e932fb-34b0-4470-863b-ea16bfe62409"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 50, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5ccbd15-f27a-4402-9aaf-f5f57523507c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 53, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e4b61432-5f00-4706-8e9c-c93b4887b542"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 54, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3afc6313-c6fa-4163-9746-211c3ae74558"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("01132001-65fa-4a01-8fe8-69e829a21156"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae3ac120-574c-45ae-8ac3-7d9c0fac23f9"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 103, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2f243faf-62f1-4566-8db4-fb17a4ab5eea"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 104, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bc2e6a24-55fb-4fa9-a1b4-5fc7f341213c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("400d174b-d536-470b-88b6-f8caae0c51c2"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2e06445c-abab-46ca-8d50-bf681ecb373f"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("95c26b5d-d4db-40d2-a003-232d3cfb1a39"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("cc4bfc27-d7a8-4a87-98f5-dcdc644cf6fa"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6fee39e9-66bd-439f-b294-d4d6089a8776"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5e7237f-25af-4eb8-95cb-36de42cbde13"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("51dea999-3be8-4ba0-81fb-d1d7952a4214"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a658cb29-fb20-45a9-b07a-f240c9417d5d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("54f9d081-6f86-45a2-892b-3c83a82e977b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("321f5c3f-824e-4424-818b-005e450b0cd1"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6fa93a6e-e959-4b2c-a7d8-e471beb9182a"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("98f810d2-af4b-42fb-9158-9371c52b50a7"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("be6e6b26-f789-4331-a92c-a2b77a6b7ae8"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 500, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9c24aff8-fbd1-4a0c-9538-35d56d8add13"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 501, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("b56c049c-5e14-499f-9a61-034955f2f29e"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 502, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("94565548-5f7c-4496-932a-a3b74c16cdf0"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 503, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("916e4478-8124-4d62-8279-7e5441964080"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 504, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("39d5e825-67d8-4c7e-9f56-26f35511162c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 505, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("10c11922-b1c5-4c62-aaa4-c22df6c1998d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 506, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1d972398-17ce-4740-8536-70742bd48cec"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 507, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d9a5f081-e7e1-4fee-a437-a8e245c89b0c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 700, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("2727e201-55ed-4bd6-b821-c772ad05f8ad"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 701, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fce88900-b3b0-4daf-9604-3dfad8ae951a"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 702, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("99406981-0a94-4f45-8f18-9be0c5e2c0fa"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 703, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3a672b19-4d42-45a6-aa5c-6b0a37163a9b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 704, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d617562a-bee9-4e43-b321-e0cfbf6eca7d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 902, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("aff2dbc4-f035-45d4-b507-d7d6538ac362"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 903, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a4af1fab-7485-4c70-97a6-d1162122aa25"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 904, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("4ce3fbe0-28e6-475b-9517-3c30e2faabc5"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 905, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e9e2c056-6e5c-4087-b3b6-53e8ba8c22e1"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 906, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("53e50386-b221-4b2b-b263-2b42fb40d633"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 907, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5fe6aad-8ea6-4521-8ebc-550a227bf0d7"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 908, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c98eb942-590f-45ad-9b25-01f44233c0fe"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 910, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c7581f24-4468-4136-b701-b370ae946373"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 911, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("23c0b18a-468d-4215-8ab9-bba4379a9242"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 912, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6adb2ff3-d348-47cb-8740-96bc6069ef73"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 913, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1dff0f47-1ec9-4836-9923-4b15fd26b9b2"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 914, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("91d3f41e-c87f-470c-9c31-f442029b83c2"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 915, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("c0090921-bfe2-4b82-b0ae-fba8b6a36d1e"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 916, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("d54d265d-414a-4a8f-bcc0-708430163f08"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 917, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("9632bf02-4689-4ac1-b7f3-a7ce4d0de022"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 918, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("031f214c-2fd0-46e0-959d-837eb1e0d3b7"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 919, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("ae4359fd-ba3d-4fca-a9a3-9cc7f8e39887"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1000, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("633fe582-6ff8-4499-af23-6f45e9f38655"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1001, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1d419475-8dc1-41da-8a37-a56532327139"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1002, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("867d066d-6104-4672-a96e-e66b89ee448d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1003, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("1e5d2fb4-04a0-4bf8-9c2d-727ff2720c37"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1100, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("6e7cefe5-1895-4425-a8b7-b011d5f16c13"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1101, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a2a79efb-6800-4980-862b-dcac276e7c4b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1102, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("edcc74f7-e598-489f-b408-c7f68ba1d751"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1200, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("797f3f97-d85d-4728-98f1-41cdeb6065ed"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1201, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("714aabff-108e-4fd8-83e8-66c96d97542a"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1202, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("393e5946-293c-4168-b0aa-717ec47b8055"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1203, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("fb34b9fd-1275-4f2c-83be-1bb939650207"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1300, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("337b7a70-279c-4459-b9a7-1c10dc916397"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1301, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a446f7f0-b32c-4180-b345-5696f1eb80b2"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1302, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("548b3311-c33c-4a73-b9d6-75497e0992e9"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1303, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("67c66af6-8c6b-4306-aa1a-f44a977a08d9"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1304, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("3c68bd13-1447-44c2-80bd-7356ae30e644"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1400, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("f0f838a6-8e06-435e-8177-a866c8f7a14b"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1401, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a7ed03fa-4916-4db7-8699-c79d3428f96c"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1402, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("de683364-6a70-4410-94f9-e3d8fcc779cd"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1403, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("e5fd9d95-1fb3-421f-b060-16eb105f64df"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1404, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("bbb229b3-02d2-4ba9-ad5d-3bac81b0630d"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1405, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("a1b23e0b-cb89-4923-a1e2-ccab9bd925eb"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1406, - columns: new[] { "ApiKey", "CreatedAt" }, - values: new object[] { new Guid("76000339-6630-4c2b-97a8-b8c9061d80e0"), NodaTime.Instant.FromUnixTimeTicks(17667042347640456L) }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.Designer.cs b/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.Designer.cs deleted file mode 100644 index 1a64eca3b..000000000 --- a/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.Designer.cs +++ /dev/null @@ -1,4298 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251226195510_FixRequestIndexDescending")] - partial class FixRequestIndexDescending - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.cs b/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.cs deleted file mode 100644 index c116dd13d..000000000 --- a/src/Melodee.Common/Migrations/20251226195510_FixRequestIndexDescending.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class FixRequestIndexDescending : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Requests_CreatedAt_Id", - table: "Requests"); - - migrationBuilder.DropIndex( - name: "IX_Requests_LastActivityAt_Id", - table: "Requests"); - - migrationBuilder.CreateIndex( - name: "IX_Requests_CreatedAt_Id", - table: "Requests", - columns: new[] { "CreatedAt", "Id" }, - descending: new[] { true, true }); - - migrationBuilder.CreateIndex( - name: "IX_Requests_LastActivityAt_Id", - table: "Requests", - columns: new[] { "LastActivityAt", "Id" }, - descending: new[] { true, true }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_Requests_CreatedAt_Id", - table: "Requests"); - - migrationBuilder.DropIndex( - name: "IX_Requests_LastActivityAt_Id", - table: "Requests"); - - migrationBuilder.CreateIndex( - name: "IX_Requests_CreatedAt_Id", - table: "Requests", - columns: new[] { "CreatedAt", "Id" }, - descending: new bool[0]); - - migrationBuilder.CreateIndex( - name: "IX_Requests_LastActivityAt_Id", - table: "Requests", - columns: new[] { "LastActivityAt", "Id" }, - descending: new bool[0]); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.Designer.cs b/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.Designer.cs deleted file mode 100644 index 415c85318..000000000 --- a/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.Designer.cs +++ /dev/null @@ -1,4302 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251228023656_AddUserPreferredLanguage")] - partial class AddUserPreferredLanguage - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.cs b/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.cs deleted file mode 100644 index 13f7c033c..000000000 --- a/src/Melodee.Common/Migrations/20251228023656_AddUserPreferredLanguage.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserPreferredLanguage : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "PreferredLanguage", - table: "Users", - type: "character varying(10)", - maxLength: 10, - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "PreferredLanguage", - table: "Users"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.Designer.cs b/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.Designer.cs deleted file mode 100644 index 4dedd81ca..000000000 --- a/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.Designer.cs +++ /dev/null @@ -1,4306 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251228031743_AddUserPreferredTheme")] - partial class AddUserPreferredTheme - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.cs b/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.cs deleted file mode 100644 index 58cbd8d9d..000000000 --- a/src/Melodee.Common/Migrations/20251228031743_AddUserPreferredTheme.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserPreferredTheme : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "PreferredTheme", - table: "Users", - type: "character varying(20)", - maxLength: 20, - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "PreferredTheme", - table: "Users"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.Designer.cs b/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.Designer.cs deleted file mode 100644 index ccc4e94ef..000000000 --- a/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.Designer.cs +++ /dev/null @@ -1,4425 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251228174908_AddEmailAndSecuritySettings")] - partial class AddEmailAndSecuritySettings - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.cs b/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.cs deleted file mode 100644 index 5afdcde0c..000000000 --- a/src/Melodee.Common/Migrations/20251228174908_AddEmailAndSecuritySettings.cs +++ /dev/null @@ -1,87 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddEmailAndSecuritySettings : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1500, new Guid("77c527bc-5317-46da-d778-e7114791749f"), null, "Enable or disable email sending functionality", NodaTime.Instant.FromUnixTimeTicks(0L), "When true, enables SMTP email sending for password resets and notifications", false, "email.enabled", null, null, 0, null, "false" }, - { 1501, new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), null, "Display name in From field of outgoing emails", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "email.fromName", null, null, 0, null, "Melodee" }, - { 1502, new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), null, "Email address in From field (REQUIRED for email sending)", NodaTime.Instant.FromUnixTimeTicks(0L), "Example: noreply@yourdomain.com", false, "email.fromEmail", null, null, 0, null, "" }, - { 1503, new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), null, "SMTP server hostname (REQUIRED for email sending)", NodaTime.Instant.FromUnixTimeTicks(0L), "Example: smtp.gmail.com or smtp.sendgrid.net", false, "email.smtpHost", null, null, 0, null, "" }, - { 1504, new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), null, "SMTP server port", NodaTime.Instant.FromUnixTimeTicks(0L), "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", false, "email.smtpPort", null, null, 0, null, "587" }, - { 1505, new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), null, "SMTP authentication username (optional)", NodaTime.Instant.FromUnixTimeTicks(0L), "Leave empty if SMTP server does not require authentication", false, "email.smtpUsername", null, null, 0, null, "" }, - { 1506, new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), null, "SMTP authentication password (optional, use env var email_smtpPassword)", NodaTime.Instant.FromUnixTimeTicks(0L), "For security, set via environment variable: email_smtpPassword", false, "email.smtpPassword", null, null, 0, null, "" }, - { 1507, new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), null, "Use SSL connection for SMTP", NodaTime.Instant.FromUnixTimeTicks(0L), "Set to true for port 465 (SSL), false for port 587 (StartTLS)", false, "email.smtpUseSsl", null, null, 0, null, "false" }, - { 1508, new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), null, "Use StartTLS for SMTP", NodaTime.Instant.FromUnixTimeTicks(0L), "Recommended: true for port 587", false, "email.smtpUseStartTls", null, null, 0, null, "true" }, - { 1600, new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), null, "Password reset token expiry time in minutes", NodaTime.Instant.FromUnixTimeTicks(0L), "How long password reset links remain valid (default: 60 minutes)", false, "security.passwordResetTokenExpiryMinutes", null, null, 0, null, "60" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1500); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1501); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1502); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1503); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1504); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1505); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1506); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1507); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1508); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1600); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.Designer.cs b/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.Designer.cs deleted file mode 100644 index d14faec0c..000000000 --- a/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.Designer.cs +++ /dev/null @@ -1 +0,0 @@ -// using System; using Melodee.Common.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using NodaTime; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace Melodee.Common.Migrations { [DbContext(typeof(MelodeeDbContext))] [Migration("20251228232809_AddPasswordResetEmailSubjectSetting")] partial class AddPasswordResetEmailSubjectSetting { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "10.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumStatus") .HasColumnType("smallint"); b.Property("AlbumType") .HasColumnType("smallint"); b.Property("AlternateNames") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("AmgId") .HasColumnType("text"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistId") .HasColumnType("integer"); b.Property("CalculatedRating") .HasColumnType("numeric"); b.Property("Comment") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("DeezerId") .HasColumnType("integer"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("Directory") .IsRequired() .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("DiscogsId") .HasColumnType("text"); b.Property("Duration") .HasColumnType("double precision"); b.PrimitiveCollection("Genres") .HasMaxLength(2000) .HasColumnType("text[]"); b.Property("ImageCount") .HasColumnType("integer"); b.Property("IsCompilation") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("ItunesId") .HasColumnType("text"); b.Property("LastFmId") .HasColumnType("text"); b.Property("LastMetaDataUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("MetaDataStatus") .HasColumnType("integer"); b.PrimitiveCollection("Moods") .HasMaxLength(2000) .HasColumnType("text[]"); b.Property("MusicBrainzId") .HasColumnType("uuid"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("NameNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("OriginalReleaseDate") .HasColumnType("date"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("ReleaseDate") .HasColumnType("date"); b.Property("ReplayGain") .HasColumnType("double precision"); b.Property("ReplayPeak") .HasColumnType("double precision"); b.Property("SongCount") .HasColumnType("smallint"); b.Property("SortName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SpotifyId") .HasColumnType("text"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("WikiDataId") .HasColumnType("text"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("MusicBrainzId") .IsUnique(); b.HasIndex("SpotifyId") .IsUnique(); b.HasIndex("ArtistId", "Name") .IsUnique(); b.HasIndex("ArtistId", "NameNormalized") .IsUnique(); b.HasIndex("ArtistId", "SortName") .IsUnique(); b.ToTable("Albums"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumCount") .HasColumnType("integer"); b.Property("AlternateNames") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("AmgId") .HasColumnType("text"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("Biography") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("CalculatedRating") .HasColumnType("numeric"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("DeezerId") .HasColumnType("integer"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("Directory") .IsRequired() .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("DiscogsId") .HasColumnType("text"); b.Property("ImageCount") .HasColumnType("integer"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("ItunesId") .HasColumnType("text"); b.Property("LastFmId") .HasColumnType("text"); b.Property("LastMetaDataUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LibraryId") .HasColumnType("integer"); b.Property("MetaDataStatus") .HasColumnType("integer"); b.Property("MusicBrainzId") .HasColumnType("uuid"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("NameNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("RealName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Roles") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("SongCount") .HasColumnType("integer"); b.Property("SortName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SpotifyId") .HasColumnType("text"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("WikiDataId") .HasColumnType("text"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("LibraryId"); b.HasIndex("MusicBrainzId") .IsUnique(); b.HasIndex("Name") .IsUnique(); b.HasIndex("NameNormalized"); b.HasIndex("SortName"); b.HasIndex("SpotifyId") .IsUnique(); b.ToTable("Artists"); }); modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistId") .HasColumnType("integer"); b.Property("ArtistRelationType") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("RelatedArtistId") .HasColumnType("integer"); b.Property("RelationEnd") .HasColumnType("timestamp with time zone"); b.Property("RelationStart") .HasColumnType("timestamp with time zone"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("RelatedArtistId"); b.HasIndex("ArtistId", "RelatedArtistId") .IsUnique(); b.ToTable("ArtistRelation"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlternateNames") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("AmgId") .HasColumnType("text"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CalculatedRating") .HasColumnType("numeric"); b.Property("Comment") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("DeezerId") .HasColumnType("integer"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("DiscogsId") .HasColumnType("text"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("ItunesId") .HasColumnType("text"); b.Property("LastFmId") .HasColumnType("text"); b.Property("LastMetaDataUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("MusicBrainzId") .HasColumnType("uuid"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("Position") .HasColumnType("integer"); b.Property("SongId") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SpotifyId") .HasColumnType("text"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.Property("WikiDataId") .HasColumnType("text"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("MusicBrainzId") .IsUnique(); b.HasIndex("SongId"); b.HasIndex("SpotifyId") .IsUnique(); b.HasIndex("UserId", "SongId") .IsUnique(); b.ToTable("Bookmarks"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsGeneratedPlaylistEnabled") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsVisible") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("Slug") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SourceName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SourceUrl") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Title") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Year") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("Slug") .IsUnique(); b.ToTable("Charts"); }); modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumTitle") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ArtistName") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ChartId") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LinkConfidence") .HasColumnType("numeric"); b.Property("LinkNotes") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("LinkStatus") .HasColumnType("smallint"); b.Property("LinkedAlbumId") .HasColumnType("integer"); b.Property("LinkedArtistId") .HasColumnType("integer"); b.Property("Rank") .HasColumnType("integer"); b.Property("ReleaseYear") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("LinkedAlbumId"); b.HasIndex("LinkedArtistId"); b.HasIndex("ChartId", "LinkedAlbumId"); b.HasIndex("ChartId", "Rank") .IsUnique(); b.ToTable("ChartItems"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumId") .HasColumnType("integer"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistId") .HasColumnType("integer"); b.Property("ContributorName") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("ContributorType") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("MetaTagIdentifier") .HasColumnType("integer"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("Role") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SongId") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SubRole") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.HasKey("Id"); b.HasIndex("AlbumId"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("SongId"); b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") .IsUnique(); b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") .IsUnique(); b.ToTable("Contributors"); }); modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CompletedAt") .HasColumnType("timestamp with time zone"); b.Property("DurationInMs") .HasColumnType("double precision"); b.Property("ErrorMessage") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("JobName") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("StartedAt") .HasColumnType("timestamp with time zone"); b.Property("Success") .HasColumnType("boolean"); b.Property("WasManualTrigger") .HasColumnType("boolean"); b.HasKey("Id"); b.HasIndex("StartedAt"); b.HasIndex("JobName", "StartedAt"); b.ToTable("JobHistories"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumCount") .HasColumnType("integer"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistCount") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastScanAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("Path") .IsRequired() .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("SongCount") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Type") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("Type") .IsUnique() .HasFilter("\"Type\" != 3"); b.ToTable("Libraries"); b.HasData( new { Id = 1, ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Files in this directory are scanned and Album information is gathered via processing.", IsLocked = false, Name = "Inbound", Path = "/storage/inbound/", SortOrder = 0, Type = 1 }, new { Id = 2, ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", IsLocked = false, Name = "Staging", Path = "/storage/staging/", SortOrder = 0, Type = 2 }, new { Id = 3, ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "The library directory to place processed, reviewed and ready to use music files into.", IsLocked = false, Name = "Storage", Path = "/storage/library/", SortOrder = 0, Type = 3 }, new { Id = 4, ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Library where user images are stored.", IsLocked = false, Name = "User Images", Path = "/storage/images/users/", SortOrder = 0, Type = 4 }, new { Id = 5, ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Library where playlist data is stored.", IsLocked = false, Name = "Playlist Data", Path = "/storage/playlists/", SortOrder = 0, Type = 5 }); }); modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("DurationInMs") .HasColumnType("double precision"); b.Property("ForAlbumId") .HasColumnType("integer"); b.Property("ForArtistId") .HasColumnType("integer"); b.Property("FoundAlbumsCount") .HasColumnType("integer"); b.Property("FoundArtistsCount") .HasColumnType("integer"); b.Property("FoundSongsCount") .HasColumnType("integer"); b.Property("LibraryId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("LibraryId"); b.ToTable("LibraryScanHistories"); }); modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ChangedBy") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsCurrentSong") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PlayQueId") .HasColumnType("integer"); b.Property("Position") .HasColumnType("double precision"); b.Property("SongApiKey") .HasColumnType("uuid"); b.Property("SongId") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("SongId"); b.HasIndex("UserId"); b.ToTable("PlayQues"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("Client") .IsRequired() .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("Hostname") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("IpAddress") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastSeenAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("MaxBitRate") .HasColumnType("integer"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ScrobbleEnabled") .HasColumnType("boolean"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("TranscodingId") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("UserAgent") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId", "Client", "UserAgent"); b.ToTable("Players"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AllowedUserIds") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("Comment") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("Duration") .HasColumnType("double precision"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsPublic") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("SongCount") .HasColumnType("smallint"); b.Property("SongId") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("SongId"); b.HasIndex("UserId", "Name") .IsUnique(); b.ToTable("Playlists"); }); modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => { b.Property("SongId") .HasColumnType("integer"); b.Property("PlaylistId") .HasColumnType("integer"); b.Property("PlaylistOrder") .HasColumnType("integer"); b.Property("SongApiKey") .HasColumnType("uuid"); b.HasKey("SongId", "PlaylistId"); b.HasIndex("PlaylistId"); b.HasIndex("SongId", "PlaylistId") .IsUnique(); b.ToTable("PlaylistSong"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("HomePageUrl") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("StreamUrl") .IsRequired() .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.ToTable("RadioStations"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("DeviceId") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ExpiresAt") .HasColumnType("timestamp with time zone"); b.Property("HashedToken") .IsRequired() .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("IpAddress") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IssuedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ReplacedByToken") .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("RevokedAt") .HasColumnType("timestamp with time zone"); b.Property("RevokedReason") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SessionStartedAt") .HasColumnType("timestamp with time zone"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("TokenFamily") .IsRequired() .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("UserAgent") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("ExpiresAt"); b.HasIndex("HashedToken") .IsUnique(); b.HasIndex("TokenFamily"); b.HasIndex("UserId"); b.ToTable("RefreshTokens"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumTitle") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("AlbumTitleNormalized") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ArtistNameNormalized") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Category") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("CreatedByUserId") .HasColumnType("integer"); b.Property("Description") .IsRequired() .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("DescriptionNormalized") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("ExternalUrl") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("LastActivityAt") .HasColumnType("timestamp with time zone"); b.Property("LastActivityType") .HasColumnType("integer"); b.Property("LastActivityUserId") .HasColumnType("integer"); b.Property("Notes") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("ReleaseYear") .HasColumnType("integer"); b.Property("SongTitle") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SongTitleNormalized") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Status") .HasColumnType("integer"); b.Property("TargetAlbumApiKey") .HasColumnType("uuid"); b.Property("TargetArtistApiKey") .HasColumnType("uuid"); b.Property("TargetSongApiKey") .HasColumnType("uuid"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("UpdatedByUserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("LastActivityUserId"); b.HasIndex("UpdatedByUserId"); b.HasIndex("CreatedAt", "Id") .IsDescending(); b.HasIndex("LastActivityAt", "Id") .IsDescending(); b.HasIndex("CreatedByUserId", "CreatedAt", "Id") .IsDescending(false, true, true); b.HasIndex("Status", "CreatedAt", "Id") .IsDescending(false, true, true); b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") .IsDescending(false, true, true); b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") .IsDescending(false, true, true); b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") .IsDescending(false, false, true, true); b.ToTable("Requests"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("Body") .IsRequired() .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("CreatedByUserId") .HasColumnType("integer"); b.Property("IsSystem") .HasColumnType("boolean"); b.Property("ParentCommentId") .HasColumnType("integer"); b.Property("RequestId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("CreatedByUserId"); b.HasIndex("ParentCommentId"); b.HasIndex("RequestId", "CreatedAt", "Id"); b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); b.ToTable("RequestComments"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => { b.Property("RequestId") .HasColumnType("integer"); b.Property("UserId") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("IsCommenter") .HasColumnType("boolean"); b.Property("IsCreator") .HasColumnType("boolean"); b.HasKey("RequestId", "UserId"); b.HasIndex("UserId", "RequestId"); b.ToTable("RequestParticipants"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => { b.Property("RequestId") .HasColumnType("integer"); b.Property("UserId") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastSeenAt") .HasColumnType("timestamp with time zone"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); b.HasKey("RequestId", "UserId"); b.HasIndex("UserId", "LastSeenAt"); b.ToTable("RequestUserStates"); }); modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ByUserAgent") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("ByUserId") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("FoundAlbumsCount") .HasColumnType("integer"); b.Property("FoundArtistsCount") .HasColumnType("integer"); b.Property("FoundOtherItems") .HasColumnType("integer"); b.Property("FoundSongsCount") .HasColumnType("integer"); b.Property("SearchDurationInMs") .HasColumnType("double precision"); b.Property("SearchQuery") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.HasKey("Id"); b.ToTable("SearchHistories"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("Category") .HasColumnType("integer"); b.Property("Comment") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("Key") .IsRequired() .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Value") .IsRequired() .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("Category"); b.HasIndex("Key") .IsUnique(); b.ToTable("Settings"); b.HasData( new { Id = 1, ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), Comment = "Add a default filter to show only albums with this or less number of songs.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "filtering.lessThanSongCount", SortOrder = 0, Value = "3" }, new { Id = 2, ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), Comment = "Add a default filter to show only albums with this or less duration.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "filtering.lessThanDuration", SortOrder = 0, Value = "720000" }, new { Id = 4, ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), Comment = "Default page size when view including pagination.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "defaults.pagesize", SortOrder = 0, Value = "100" }, new { Id = 6, ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "userinterface.toastAutoCloseTime", SortOrder = 0, Value = "2000" }, new { Id = 300, ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), Category = 3, Comment = "Short Format to use when displaying full dates.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "formatting.dateTimeDisplayFormatShort", SortOrder = 0, Value = "yyyyMMdd HH\\:mm" }, new { Id = 301, ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), Category = 3, Comment = "Format to use when displaying activity related dates (e.g., processing messages)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "formatting.dateTimeDisplayActivityFormat", SortOrder = 0, Value = "hh\\:mm\\:ss\\.ffff" }, new { Id = 9, ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), Comment = "List of ignored articles when scanning media (pipe delimited).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.ignoredArticles", SortOrder = 0, Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" }, new { Id = 500, ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), Category = 5, Comment = "Is Magic processing enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.enabled", SortOrder = 0, Value = "true" }, new { Id = 501, ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), Category = 5, Comment = "Renumber songs when doing magic processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doRenumberSongs", SortOrder = 0, Value = "true" }, new { Id = 502, ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), Category = 5, Comment = "Remove featured artists from song artist when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doRemoveFeaturingArtistFromSongArtist", SortOrder = 0, Value = "true" }, new { Id = 503, ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), Category = 5, Comment = "Remove featured artists from song title when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doRemoveFeaturingArtistFromSongTitle", SortOrder = 0, Value = "true" }, new { Id = 504, ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), Category = 5, Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doReplaceSongsArtistSeparators", SortOrder = 0, Value = "true" }, new { Id = 505, ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), Category = 5, Comment = "Set the song year to current year if invalid or missing when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doSetYearToCurrentIfInvalid", SortOrder = 0, Value = "false" }, new { Id = 506, ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), Category = 5, Comment = "Remove unwanted text from album title when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doRemoveUnwantedTextFromAlbumTitle", SortOrder = 0, Value = "true" }, new { Id = 507, ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), Category = 5, Comment = "Remove unwanted text from song titles when doing magic.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "magic.doRemoveUnwantedTextFromSongTitles", SortOrder = 0, Value = "true" }, new { Id = 200, ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), Category = 2, Comment = "Enable Melodee to convert non-mp3 media files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "conversion.enabled", SortOrder = 0, Value = "true" }, new { Id = 201, ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), Category = 2, Comment = "Bitrate to convert non-mp3 media files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "conversion.bitrate", SortOrder = 0, Value = "384" }, new { Id = 202, ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), Category = 2, Comment = "Vbr to convert non-mp3 media files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "conversion.vbrLevel", SortOrder = 0, Value = "4" }, new { Id = 203, ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), Category = 2, Comment = "Sampling rate to convert non-mp3 media files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "conversion.samplingRate", SortOrder = 0, Value = "48000" }, new { Id = 700, ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), Category = 7, Comment = "Process of CueSheet files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "plugin.cueSheet.enabled", SortOrder = 0, Value = "true" }, new { Id = 701, ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), Category = 7, Comment = "Process of M3U files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "plugin.m3u.enabled", SortOrder = 0, Value = "true" }, new { Id = 702, ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), Category = 7, Comment = "Process of NFO files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "plugin.nfo.enabled", SortOrder = 0, Value = "true" }, new { Id = 703, ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), Category = 7, Comment = "Process of Simple File Verification (SFV) files during processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "plugin.simpleFileVerification.enabled", SortOrder = 0, Value = "true" }, new { Id = 704, ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), Category = 7, Comment = "If true then all comments will be removed from media files.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.doDeleteComments", SortOrder = 0, Value = "true" }, new { Id = 26, ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), Comment = "Fragments of artist names to replace (JSON Dictionary).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.artistNameReplacements", SortOrder = 0, Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" }, new { Id = 27, ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", SortOrder = 0, Value = "false" }, new { Id = 28, ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.doDeleteOriginal", SortOrder = 0, Value = "false" }, new { Id = 29, ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), Comment = "Extension to add to file when converted, leave blank to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.convertedExtension", SortOrder = 0, Value = "_converted" }, new { Id = 30, ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), Comment = "Extension to add to file when processed, leave blank to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.processedExtension", SortOrder = 0, Value = "_processed" }, new { Id = 32, ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.doOverrideExistingMelodeeDataFiles", SortOrder = 0, Value = "true" }, new { Id = 34, ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), Comment = "The maximum number of files to process, set to zero for unlimited.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.maximumProcessingCount", SortOrder = 0, Value = "0" }, new { Id = 35, ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), Comment = "Maximum allowed length of album directory name.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.maximumAlbumDirectoryNameLength", SortOrder = 0, Value = "255" }, new { Id = 36, ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), Comment = "Maximum allowed length of artist directory name.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.maximumArtistDirectoryNameLength", SortOrder = 0, Value = "255" }, new { Id = 37, ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), Comment = "Fragments to remove from album titles (JSON array).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.albumTitleRemovals", SortOrder = 0, Value = "['^', '~', '#']" }, new { Id = 38, ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), Comment = "Fragments to remove from song titles (JSON array).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.songTitleRemovals", SortOrder = 0, Value = "[';', '(Remaster)', 'Remaster']" }, new { Id = 39, ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), Comment = "Continue processing if an error is encountered.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.doContinueOnDirectoryProcessingErrors", SortOrder = 0, Value = "true" }, new { Id = 41, ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), Comment = "Is scripting enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scripting.enabled", SortOrder = 0, Value = "false" }, new { Id = 42, ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), Comment = "Script to run before processing the inbound directory, leave blank to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scripting.preDiscoveryScript", SortOrder = 0, Value = "" }, new { Id = 43, ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), Comment = "Script to run after processing the inbound directory, leave blank to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scripting.postDiscoveryScript", SortOrder = 0, Value = "" }, new { Id = 45, ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), Comment = "Don't create performer contributors for these performer names.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.ignoredPerformers", SortOrder = 0, Value = "" }, new { Id = 46, ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), Comment = "Don't create production contributors for these production names.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.ignoredProduction", SortOrder = 0, Value = "['www.t.me;pmedia_music']" }, new { Id = 47, ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), Comment = "Don't create publisher contributors for these artist names.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.ignoredPublishers", SortOrder = 0, Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" }, new { Id = 49, ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "encryption.privateKey", SortOrder = 0, Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" }, new { Id = 50, ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.duplicateAlbumPrefix", SortOrder = 0, Value = "_duplicate_ " }, new { Id = 1300, ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), Category = 13, Comment = "The maximum value a song number can have for an album.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "validation.maximumSongNumber", SortOrder = 0, Value = "9999" }, new { Id = 1301, ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), Category = 13, Comment = "Minimum allowed year for an album.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "validation.minimumAlbumYear", SortOrder = 0, Value = "1860" }, new { Id = 1302, ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), Category = 13, Comment = "Maximum allowed year for an album.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "validation.maximumAlbumYear", SortOrder = 0, Value = "2150" }, new { Id = 1303, ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), Category = 13, Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "validation.minimumSongCount", SortOrder = 0, Value = "3" }, new { Id = 1304, ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), Category = 13, Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "validation.minimumAlbumDuration", SortOrder = 0, Value = "10" }, new { Id = 100, ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), Category = 1, Comment = "OpenSubsonic server supported Subsonic API version.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", SortOrder = 0, Value = "1.16.1" }, new { Id = 101, ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), Category = 1, Comment = "OpenSubsonic server name.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "openSubsonicServer.openSubsonicServer.type", SortOrder = 0, Value = "Melodee" }, new { Id = 103, ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), Category = 1, Comment = "OpenSubsonic email to use in License responses.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "openSubsonicServer.openSubsonicServerLicenseEmail", SortOrder = 0, Value = "noreply@localhost.lan" }, new { Id = 104, ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), Category = 1, Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", SortOrder = 0, Value = "1000" }, new { Id = 53, ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "defaults.batchSize", SortOrder = 0, Value = "250" }, new { Id = 54, ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "processing.fileExtensionsToDelete", SortOrder = 0, Value = "['log', 'lnk', 'lrc', 'doc']" }, new { Id = 902, ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), Category = 9, Comment = "User agent to send with Search engine requests.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.userAgent", SortOrder = 0, Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" }, new { Id = 903, ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), Category = 9, Comment = "Default page size when performing a search engine search.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.defaultPageSize", SortOrder = 0, Value = "20" }, new { Id = 904, ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), Category = 9, Comment = "Is MusicBrainz search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.enabled", SortOrder = 0, Value = "true" }, new { Id = 905, ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), Category = 9, Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.storagePath", SortOrder = 0, Value = "/melodee_test/search-engine-storage/musicbrainz/" }, new { Id = 906, ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), Category = 9, Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.importMaximumToProcess", SortOrder = 0, Value = "0" }, new { Id = 907, ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), Category = 9, Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.importBatchSize", SortOrder = 0, Value = "50000" }, new { Id = 908, ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), Category = 9, Comment = "Timestamp of when last MusicBrainz import was successful.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.importLastImportTimestamp", SortOrder = 0, Value = "" }, new { Id = 910, ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), Category = 9, Comment = "Is Spotify search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.spotify.enabled", SortOrder = 0, Value = "false" }, new { Id = 911, ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), Category = 9, Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.spotify.apiKey", SortOrder = 0, Value = "" }, new { Id = 912, ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), Category = 9, Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.spotify.sharedSecret", SortOrder = 0, Value = "" }, new { Id = 913, ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), Category = 9, Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.spotify.accessToken", SortOrder = 0, Value = "" }, new { Id = 914, ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), Category = 9, Comment = "Is ITunes search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.itunes.enabled", SortOrder = 0, Value = "true" }, new { Id = 915, ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), Category = 9, Comment = "Is LastFM search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.lastFm.Enabled", SortOrder = 0, Value = "true" }, new { Id = 916, ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), Category = 9, Comment = "When performing a search engine search, the maximum allowed page size.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.maximumAllowedPageSize", SortOrder = 0, Value = "1000" }, new { Id = 917, ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), Category = 9, Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.artistSearchDatabaseRefreshInDays", SortOrder = 0, Value = "14" }, new { Id = 918, ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), Category = 9, Comment = "Is Deezer search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.deezer.enabled", SortOrder = 0, Value = "true" }, new { Id = 919, ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), Category = 9, Comment = "Is Metal API search engine enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.metalApi.enabled", SortOrder = 0, Value = "false" }, new { Id = 400, ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), Category = 4, Comment = "Include any embedded images from media files into the Melodee data file.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.doLoadEmbeddedImages", SortOrder = 0, Value = "true" }, new { Id = 401, ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), Category = 4, Comment = "Small image size (square image, this is both width and height).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.smallSize", SortOrder = 0, Value = "300" }, new { Id = 402, ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), Category = 4, Comment = "Medium image size (square image, this is both width and height).", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.mediumSize", SortOrder = 0, Value = "600" }, new { Id = 403, ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), Category = 4, Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.largeSize", SortOrder = 0, Value = "1600" }, new { Id = 404, ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), Category = 4, Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.maximumNumberOfAlbumImages", SortOrder = 0, Value = "25" }, new { Id = 405, ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), Category = 4, Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.maximumNumberOfArtistImages", SortOrder = 0, Value = "25" }, new { Id = 406, ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), Category = 4, Comment = "Images under this size are considered invalid, set to zero to disable.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "imaging.minimumImageSize", SortOrder = 0, Value = "300" }, new { Id = 1200, ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), Category = 12, Comment = "Default format for transcoding.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "transcoding.default", SortOrder = 0, Value = "raw" }, new { Id = 1201, ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), Category = 12, Comment = "Default command to transcode MP3 for streaming.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "transcoding.command.mp3", SortOrder = 0, Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" }, new { Id = 1202, ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), Category = 12, Comment = "Default command to transcode using libopus for streaming.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "transcoding.command.opus", SortOrder = 0, Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" }, new { Id = 1203, ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), Category = 12, Comment = "Default command to transcode to aac for streaming.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "transcoding.command.aac", SortOrder = 0, Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" }, new { Id = 1000, ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), Category = 10, Comment = "Is scrobbling enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scrobbling.enabled", SortOrder = 0, Value = "true" }, new { Id = 1001, ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), Category = 10, Comment = "Is scrobbling to Last.fm enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scrobbling.lastFm.Enabled", SortOrder = 0, Value = "false" }, new { Id = 1002, ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), Category = 10, Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scrobbling.lastFm.apiKey", SortOrder = 0, Value = "" }, new { Id = 1003, ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), Category = 10, Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "scrobbling.lastFm.sharedSecret", SortOrder = 0, Value = "" }, new { Id = 1100, ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), Category = 11, Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "system.baseUrl", SortOrder = 0, Value = "** REQUIRED: THIS MUST BE EDITED **" }, new { Id = 1101, ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), Category = 11, Comment = "Is downloading enabled.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "system.isDownloadingEnabled", SortOrder = 0, Value = "true" }, new { Id = 1102, ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), Category = 11, Comment = "Maximum upload size in bytes for UI uploads.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "system.maxUploadSize", SortOrder = 0, Value = "5242880" }, new { Id = 1400, ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), Category = 14, Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.artistHousekeeping.cronExpression", SortOrder = 0, Value = "0 0 0/1 1/1 * ? *" }, new { Id = 1401, ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), Category = 14, Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.libraryProcess.cronExpression", SortOrder = 0, Value = "0 */10 * ? * *" }, new { Id = 1402, ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), Category = 14, Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.libraryInsert.cronExpression", SortOrder = 0, Value = "0 0 0 * * ?" }, new { Id = 1403, ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), Category = 14, Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.musicbrainzUpdateDatabase.cronExpression", SortOrder = 0, Value = "0 0 12 1 * ?" }, new { Id = 1404, ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), Category = 14, Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.artistSearchEngineHousekeeping.cronExpression", SortOrder = 0, Value = "0 0 0 * * ?" }, new { Id = 1405, ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), Category = 14, Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.chartUpdate.cronExpression", SortOrder = 0, Value = "0 0 2 * * ?" }, new { Id = 1406, ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), Category = 14, Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "jobs.stagingAutoMove.cronExpression", SortOrder = 0, Value = "0 */15 * * * ?" }, new { Id = 1500, ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), Comment = "Enable or disable email sending functionality", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "When true, enables SMTP email sending for password resets and notifications", IsLocked = false, Key = "email.enabled", SortOrder = 0, Value = "false" }, new { Id = 1501, ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), Comment = "Display name in From field of outgoing emails", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "email.fromName", SortOrder = 0, Value = "Melodee" }, new { Id = 1502, ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), Comment = "Email address in From field (REQUIRED for email sending)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Example: noreply@yourdomain.com", IsLocked = false, Key = "email.fromEmail", SortOrder = 0, Value = "" }, new { Id = 1503, ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), Comment = "SMTP server hostname (REQUIRED for email sending)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Example: smtp.gmail.com or smtp.sendgrid.net", IsLocked = false, Key = "email.smtpHost", SortOrder = 0, Value = "" }, new { Id = 1504, ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), Comment = "SMTP server port", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", IsLocked = false, Key = "email.smtpPort", SortOrder = 0, Value = "587" }, new { Id = 1505, ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), Comment = "SMTP authentication username (optional)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Leave empty if SMTP server does not require authentication", IsLocked = false, Key = "email.smtpUsername", SortOrder = 0, Value = "" }, new { Id = 1506, ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "For security, set via environment variable: email_smtpPassword", IsLocked = false, Key = "email.smtpPassword", SortOrder = 0, Value = "" }, new { Id = 1507, ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), Comment = "Use SSL connection for SMTP", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", IsLocked = false, Key = "email.smtpUseSsl", SortOrder = 0, Value = "false" }, new { Id = 1508, ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), Comment = "Use StartTLS for SMTP", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Recommended: true for port 587", IsLocked = false, Key = "email.smtpUseStartTls", SortOrder = 0, Value = "true" }, new { Id = 1509, ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), Comment = "Password reset email subject line", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "Subject for password reset emails", IsLocked = false, Key = "email.resetPassword.subject", SortOrder = 0, Value = "Reset your Melodee password" }, new { Id = 1600, ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), Comment = "Password reset token expiry time in minutes", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), Description = "How long password reset links remain valid (default: 60 minutes)", IsLocked = false, Key = "security.passwordResetTokenExpiryMinutes", SortOrder = 0, Value = "60" }); }); modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("ExpiresAt") .HasColumnType("timestamp with time zone"); b.Property("IsDownloadable") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastVisitedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ShareId") .HasColumnType("integer"); b.Property("ShareType") .HasColumnType("integer"); b.Property("ShareUniqueId") .IsRequired() .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.Property("VisitCount") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId"); b.ToTable("Shares"); }); modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ByUserAgent") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Client") .IsRequired() .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("IpAddress") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("ShareId") .HasColumnType("integer"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.ToTable("ShareActivities"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumId") .HasColumnType("integer"); b.Property("AlternateNames") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("AmgId") .HasColumnType("text"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("BPM") .HasColumnType("integer"); b.Property("BitDepth") .HasColumnType("integer"); b.Property("BitRate") .HasColumnType("integer"); b.Property("CalculatedRating") .HasColumnType("numeric"); b.Property("ChannelCount") .HasColumnType("integer"); b.Property("Comment") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ContentType") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("DeezerId") .HasColumnType("integer"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("DiscogsId") .HasColumnType("text"); b.Property("Duration") .HasColumnType("double precision"); b.Property("FileHash") .IsRequired() .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("FileName") .IsRequired() .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("FileSize") .HasColumnType("bigint"); b.PrimitiveCollection("Genres") .HasMaxLength(2000) .HasColumnType("text[]"); b.Property("ImageCount") .HasColumnType("integer"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsVbr") .HasColumnType("boolean"); b.Property("ItunesId") .HasColumnType("text"); b.Property("LastFmId") .HasColumnType("text"); b.Property("LastMetaDataUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Lyrics") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.PrimitiveCollection("Moods") .HasMaxLength(2000) .HasColumnType("text[]"); b.Property("MusicBrainzId") .HasColumnType("uuid"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PartTitles") .HasMaxLength(1000) .HasColumnType("character varying(1000)"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("ReplayGain") .HasColumnType("double precision"); b.Property("ReplayPeak") .HasColumnType("double precision"); b.Property("SamplingRate") .HasColumnType("integer"); b.Property("SongNumber") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("SpotifyId") .HasColumnType("text"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Title") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("TitleNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("TitleSort") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("WikiDataId") .HasColumnType("text"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("MusicBrainzId") .IsUnique(); b.HasIndex("SpotifyId") .IsUnique(); b.HasIndex("Title"); b.HasIndex("AlbumId", "SongNumber") .IsUnique(); b.ToTable("Songs"); }); modelBuilder.Entity("Melodee.Common.Data.Models.User", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("Email") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("EmailNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("HasCommentRole") .HasColumnType("boolean"); b.Property("HasCoverArtRole") .HasColumnType("boolean"); b.Property("HasDownloadRole") .HasColumnType("boolean"); b.Property("HasJukeboxRole") .HasColumnType("boolean"); b.Property("HasPlaylistRole") .HasColumnType("boolean"); b.Property("HasPodcastRole") .HasColumnType("boolean"); b.Property("HasSettingsRole") .HasColumnType("boolean"); b.Property("HasShareRole") .HasColumnType("boolean"); b.Property("HasStreamRole") .HasColumnType("boolean"); b.Property("HasUploadRole") .HasColumnType("boolean"); b.Property("HatedGenres") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("IsAdmin") .HasColumnType("boolean"); b.Property("IsEditor") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsScrobblingEnabled") .HasColumnType("boolean"); b.Property("LastActivityAt") .HasColumnType("timestamp with time zone"); b.Property("LastFmSessionKey") .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("LastLoginAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PasswordEncrypted") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("PasswordResetToken") .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("PasswordResetTokenExpiresAt") .HasColumnType("timestamp with time zone"); b.Property("PreferredLanguage") .HasMaxLength(10) .HasColumnType("character varying(10)"); b.Property("PreferredTheme") .HasMaxLength(20) .HasColumnType("character varying(20)"); b.Property("PublicKey") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("StarredGenres") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("TimeZoneId") .IsRequired() .HasMaxLength(64) .HasColumnType("character varying(64)"); b.Property("UserName") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("UserNameNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("Email") .IsUnique(); b.HasIndex("UserName") .IsUnique(); b.ToTable("Users"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("AlbumId") .HasColumnType("integer"); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsHated") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsStarred") .HasColumnType("boolean"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("Rating") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("StarredAt") .HasColumnType("timestamp with time zone"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("AlbumId"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId", "AlbumId") .IsUnique(); b.ToTable("UserAlbums"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("ArtistId") .HasColumnType("integer"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsHated") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsStarred") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("Rating") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("StarredAt") .HasColumnType("timestamp with time zone"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("ArtistId"); b.HasIndex("UserId", "ArtistId") .IsUnique(); b.ToTable("UserArtists"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("BandsJson") .IsRequired() .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsDefault") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Name") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("NameNormalized") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId", "Name") .IsUnique(); b.ToTable("UserEqualizerPresets"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PinId") .HasColumnType("integer"); b.Property("PinType") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId", "PinId", "PinType") .IsUnique(); b.ToTable("UserPins"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("AudioQuality") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("CrossfadeDuration") .HasColumnType("double precision"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("EqualizerPreset") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("GaplessPlayback") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUsedDevice") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("ReplayGain") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.Property("VolumeNormalization") .HasColumnType("boolean"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId") .IsUnique(); b.ToTable("UserPlaybackSettings"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("DisplayName") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Email") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("HostedDomain") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("LastLoginAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("Provider") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("Subject") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("UserId"); b.HasIndex("Provider", "Subject") .IsUnique(); b.ToTable("UserSocialLogins"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ApiKey") .HasColumnType("uuid"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(62000) .HasColumnType("character varying(62000)"); b.Property("IsHated") .HasColumnType("boolean"); b.Property("IsLocked") .HasColumnType("boolean"); b.Property("IsStarred") .HasColumnType("boolean"); b.Property("LastPlayedAt") .HasColumnType("timestamp with time zone"); b.Property("LastUpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("Notes") .HasMaxLength(4000) .HasColumnType("character varying(4000)"); b.Property("PlayedCount") .HasColumnType("integer"); b.Property("Rating") .HasColumnType("integer"); b.Property("SongId") .HasColumnType("integer"); b.Property("SortOrder") .HasColumnType("integer"); b.Property("StarredAt") .HasColumnType("timestamp with time zone"); b.Property("Tags") .HasMaxLength(2000) .HasColumnType("character varying(2000)"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("ApiKey") .IsUnique(); b.HasIndex("SongId"); b.HasIndex("UserId", "SongId") .IsUnique(); b.ToTable("UserSongs"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("integer"); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ByUserAgent") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("Client") .IsRequired() .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("IpAddress") .HasMaxLength(255) .HasColumnType("character varying(255)"); b.Property("IsNowPlaying") .HasColumnType("boolean"); b.Property("LastHeartbeatAt") .HasColumnType("timestamp with time zone"); b.Property("PlayedAt") .HasColumnType("timestamp with time zone"); b.Property("SecondsPlayed") .HasColumnType("integer"); b.Property("SongId") .HasColumnType("integer"); b.Property("Source") .HasColumnType("smallint"); b.Property("UserId") .HasColumnType("integer"); b.HasKey("Id"); b.HasIndex("PlayedAt"); b.HasIndex("SongId", "PlayedAt"); b.HasIndex("UserId", "PlayedAt"); b.ToTable("UserSongPlayHistories"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => { b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") .WithMany("Albums") .HasForeignKey("ArtistId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Artist"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => { b.HasOne("Melodee.Common.Data.Models.Library", "Library") .WithMany() .HasForeignKey("LibraryId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Library"); }); modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => { b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") .WithMany("RelatedArtists") .HasForeignKey("ArtistId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") .WithMany() .HasForeignKey("RelatedArtistId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Artist"); b.Navigation("RelatedArtist"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => { b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany("Bookmarks") .HasForeignKey("SongId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("Bookmarks") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Song"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => { b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") .WithMany("Items") .HasForeignKey("ChartId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") .WithMany() .HasForeignKey("LinkedAlbumId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") .WithMany() .HasForeignKey("LinkedArtistId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("Chart"); b.Navigation("LinkedAlbum"); b.Navigation("LinkedArtist"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => { b.HasOne("Melodee.Common.Data.Models.Album", "Album") .WithMany("Contributors") .HasForeignKey("AlbumId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") .WithMany("Contributors") .HasForeignKey("ArtistId"); b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany("Contributors") .HasForeignKey("SongId"); b.Navigation("Album"); b.Navigation("Artist"); b.Navigation("Song"); }); modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => { b.HasOne("Melodee.Common.Data.Models.Library", "Library") .WithMany("ScanHistories") .HasForeignKey("LibraryId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Library"); }); modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => { b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany("PlayQues") .HasForeignKey("SongId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("PlayQues") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Song"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("Players") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => { b.HasOne("Melodee.Common.Data.Models.Song", null) .WithMany("Playlists") .HasForeignKey("SongId"); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("Playlists") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => { b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") .WithMany("Songs") .HasForeignKey("PlaylistId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany() .HasForeignKey("SongId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Playlist"); b.Navigation("Song"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("RefreshTokens") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => { b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") .WithMany() .HasForeignKey("CreatedByUserId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") .WithMany() .HasForeignKey("LastActivityUserId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") .WithMany() .HasForeignKey("UpdatedByUserId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("CreatedByUser"); b.Navigation("LastActivityUser"); b.Navigation("UpdatedByUser"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => { b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") .WithMany() .HasForeignKey("CreatedByUserId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") .WithMany("Replies") .HasForeignKey("ParentCommentId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("Melodee.Common.Data.Models.Request", "Request") .WithMany("Comments") .HasForeignKey("RequestId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CreatedByUser"); b.Navigation("ParentComment"); b.Navigation("Request"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => { b.HasOne("Melodee.Common.Data.Models.Request", "Request") .WithMany("Participants") .HasForeignKey("RequestId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Request"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => { b.HasOne("Melodee.Common.Data.Models.Request", "Request") .WithMany("UserStates") .HasForeignKey("RequestId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Request"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("Shares") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => { b.HasOne("Melodee.Common.Data.Models.Album", "Album") .WithMany("Songs") .HasForeignKey("AlbumId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Album"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => { b.HasOne("Melodee.Common.Data.Models.Album", "Album") .WithMany("UserAlbums") .HasForeignKey("AlbumId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("UserAlbums") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Album"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => { b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") .WithMany("UserArtists") .HasForeignKey("ArtistId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("UserArtists") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Artist"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("Pins") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => { b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("SocialLogins") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => { b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany("UserSongs") .HasForeignKey("SongId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany("UserSongs") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Song"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => { b.HasOne("Melodee.Common.Data.Models.Song", "Song") .WithMany() .HasForeignKey("SongId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Melodee.Common.Data.Models.User", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Song"); b.Navigation("User"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => { b.Navigation("Contributors"); b.Navigation("Songs"); b.Navigation("UserAlbums"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => { b.Navigation("Albums"); b.Navigation("Contributors"); b.Navigation("RelatedArtists"); b.Navigation("UserArtists"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => { b.Navigation("Items"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => { b.Navigation("ScanHistories"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => { b.Navigation("Songs"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => { b.Navigation("Comments"); b.Navigation("Participants"); b.Navigation("UserStates"); }); modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => { b.Navigation("Replies"); }); modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => { b.Navigation("Bookmarks"); b.Navigation("Contributors"); b.Navigation("PlayQues"); b.Navigation("Playlists"); b.Navigation("UserSongs"); }); modelBuilder.Entity("Melodee.Common.Data.Models.User", b => { b.Navigation("Bookmarks"); b.Navigation("Pins"); b.Navigation("PlayQues"); b.Navigation("Players"); b.Navigation("Playlists"); b.Navigation("RefreshTokens"); b.Navigation("Shares"); b.Navigation("SocialLogins"); b.Navigation("UserAlbums"); b.Navigation("UserArtists"); b.Navigation("UserSongs"); }); #pragma warning restore 612, 618 } } } \ No newline at end of file diff --git a/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.cs b/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.cs deleted file mode 100644 index ee43b31db..000000000 --- a/src/Melodee.Common/Migrations/20251228232809_AddPasswordResetEmailSubjectSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPasswordResetEmailSubjectSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 1509, new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), null, "Password reset email subject line", NodaTime.Instant.FromUnixTimeTicks(0L), "Subject for password reset emails", false, "email.resetPassword.subject", null, null, 0, null, "Reset your Melodee password" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1509); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.Designer.cs b/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.Designer.cs deleted file mode 100644 index c738b4f47..000000000 --- a/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.Designer.cs +++ /dev/null @@ -1,4449 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251228233809_AddTemplatesLibrary")] - partial class AddTemplatesLibrary - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.cs b/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.cs deleted file mode 100644 index 742936154..000000000 --- a/src/Melodee.Common/Migrations/20251228233809_AddTemplatesLibrary.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddTemplatesLibrary : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Libraries", - columns: new[] { "Id", "AlbumCount", "ApiKey", "ArtistCount", "CreatedAt", "Description", "IsLocked", "LastScanAt", "LastUpdatedAt", "Name", "Notes", "Path", "SongCount", "SortOrder", "Tags", "Type" }, - values: new object[] { 10, null, new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where templates are stored, organized by language code.", false, null, null, "Templates", null, "/storage/templates/", null, 0, null, 7 }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Libraries", - keyColumn: "Id", - keyValue: 10); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.Designer.cs b/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.Designer.cs deleted file mode 100644 index 34851a7a9..000000000 --- a/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.Designer.cs +++ /dev/null @@ -1,4462 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251229223621_AddSystemSiteNameSetting")] - partial class AddSystemSiteNameSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.cs b/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.cs deleted file mode 100644 index 3684ab342..000000000 --- a/src/Melodee.Common/Migrations/20251229223621_AddSystemSiteNameSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddSystemSiteNameSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 1103, new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), 11, "Name for this Melodee instance (used in emails and UI branding).", NodaTime.Instant.FromUnixTimeTicks(0L), "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", false, "system.siteName", null, null, 0, null, "Melodee" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1103); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.Designer.cs b/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.Designer.cs deleted file mode 100644 index dfa2b2762..000000000 --- a/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.Designer.cs +++ /dev/null @@ -1,4465 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251229232438_AddEmailConfirmedDateToUser")] - partial class AddEmailConfirmedDateToUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.cs b/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.cs deleted file mode 100644 index 8bb6fa3ce..000000000 --- a/src/Melodee.Common/Migrations/20251229232438_AddEmailConfirmedDateToUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddEmailConfirmedDateToUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "EmailConfirmedDate", - table: "Users", - type: "timestamp with time zone", - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "EmailConfirmedDate", - table: "Users"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.Designer.cs b/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.Designer.cs deleted file mode 100644 index 2961f5eee..000000000 --- a/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.Designer.cs +++ /dev/null @@ -1,4465 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251230144516_AddStagingAlbumRevalidationJobCronSetting")] - partial class AddStagingAlbumRevalidationJobCronSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.cs b/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.cs deleted file mode 100644 index 6c4f1309b..000000000 --- a/src/Melodee.Common/Migrations/20251230144516_AddStagingAlbumRevalidationJobCronSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddStagingAlbumRevalidationJobCronSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { new Guid("b9f4a3e2-7c81-4d5f-8a2b-3e1f9c6d0a4b"), 14, "Cron expression for staging album revalidation job. Re-validates albums with invalid artists. Default '0 0 3 ? * SUN' runs weekly on Sunday at 3am.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.stagingAlbumRevalidation.cronExpression", null, null, 0, null, "0 0 3 ? * SUN" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "ApiKey", - keyValue: new Guid("b9f4a3e2-7c81-4d5f-8a2b-3e1f9c6d0a4b")); - } - } -} diff --git a/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.Designer.cs b/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.Designer.cs deleted file mode 100644 index 9aae20323..000000000 --- a/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.Designer.cs +++ /dev/null @@ -1,4465 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20251230145403_AddNowPlayingCleanupJobCronSetting")] - partial class AddNowPlayingCleanupJobCronSetting - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.cs b/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.cs deleted file mode 100644 index 952e3191a..000000000 --- a/src/Melodee.Common/Migrations/20251230145403_AddNowPlayingCleanupJobCronSetting.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddNowPlayingCleanupJobCronSetting : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { new Guid("c7d5e2f1-8a93-4b6e-9c1d-2f3a4b5c6d7e"), 14, "Cron expression for now playing cleanup job. Removes stale now playing records. Default '0 */5 * * * ?' runs every 5 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.nowPlayingCleanup.cronExpression", null, null, 0, null, "0 */5 * * * ?" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "ApiKey", - keyValue: new Guid("c7d5e2f1-8a93-4b6e-9c1d-2f3a4b5c6d7e")); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.Designer.cs b/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.Designer.cs deleted file mode 100644 index b99443648..000000000 --- a/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.Designer.cs +++ /dev/null @@ -1,4652 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260101213942_AddJellyfinAccessToken")] - partial class AddJellyfinAccessToken - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.cs b/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.cs deleted file mode 100644 index 59d80c9da..000000000 --- a/src/Melodee.Common/Migrations/20260101213942_AddJellyfinAccessToken.cs +++ /dev/null @@ -1,137 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddJellyfinAccessToken : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "JellyfinAccessTokens", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - TokenHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), - TokenPrefixHash = table.Column(type: "character varying(8)", maxLength: 8, nullable: false), - TokenSalt = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUsedAt = table.Column(type: "timestamp with time zone", nullable: true), - ExpiresAt = table.Column(type: "timestamp with time zone", nullable: true), - RevokedAt = table.Column(type: "timestamp with time zone", nullable: true), - Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Device = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - DeviceId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Version = table.Column(type: "character varying(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_JellyfinAccessTokens", x => x.Id); - table.ForeignKey( - name: "FK_JellyfinAccessTokens_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1700, new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), null, "Enable Jellyfin API compatibility", NodaTime.Instant.FromUnixTimeTicks(0L), "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", false, "jellyfin.enabled", null, null, 0, null, "true" }, - { 1701, new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), null, "Internal route prefix for Jellyfin API", NodaTime.Instant.FromUnixTimeTicks(0L), "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", false, "jellyfin.routePrefix", null, null, 0, null, "/api/jf" }, - { 1702, new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), null, "Jellyfin token expiry time in hours", NodaTime.Instant.FromUnixTimeTicks(0L), "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", false, "jellyfin.token.expiresAfterHours", null, null, 0, null, "168" }, - { 1703, new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), null, "Maximum active Jellyfin tokens per user", NodaTime.Instant.FromUnixTimeTicks(0L), "The maximum number of active Jellyfin tokens allowed per user (default: 10)", false, "jellyfin.token.maxActivePerUser", null, null, 0, null, "10" }, - { 1704, new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), null, "Allow legacy Emby/MediaBrowser headers", NodaTime.Instant.FromUnixTimeTicks(0L), "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", false, "jellyfin.token.allowLegacyHeaders", null, null, 0, null, "true" }, - { 1705, new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), null, "Secret pepper for Jellyfin token hashing", NodaTime.Instant.FromUnixTimeTicks(0L), "Server-side secret used in token hash computation. Change this value in production for added security.", false, "jellyfin.token.pepper", null, null, 0, null, "ChangeThisPepperInProduction" }, - { 1706, new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), null, "API requests allowed per period", NodaTime.Instant.FromUnixTimeTicks(0L), "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", false, "jellyfin.rateLimit.apiRequestsPerPeriod", null, null, 0, null, "200" }, - { 1707, new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), null, "Rate limit period in seconds", NodaTime.Instant.FromUnixTimeTicks(0L), "Duration of the rate limit period in seconds (default: 60)", false, "jellyfin.rateLimit.apiPeriodSeconds", null, null, 0, null, "60" }, - { 1708, new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), null, "Concurrent streams per user", NodaTime.Instant.FromUnixTimeTicks(0L), "Maximum number of concurrent audio streams allowed per user (default: 2)", false, "jellyfin.rateLimit.streamConcurrentPerUser", null, null, 0, null, "2" } - }); - - migrationBuilder.CreateIndex( - name: "IX_JellyfinAccessTokens_TokenHash", - table: "JellyfinAccessTokens", - column: "TokenHash", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_JellyfinAccessTokens_TokenPrefixHash", - table: "JellyfinAccessTokens", - column: "TokenPrefixHash"); - - migrationBuilder.CreateIndex( - name: "IX_JellyfinAccessTokens_UserId", - table: "JellyfinAccessTokens", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_JellyfinAccessTokens_UserId_ExpiresAt_RevokedAt", - table: "JellyfinAccessTokens", - columns: new[] { "UserId", "ExpiresAt", "RevokedAt" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "JellyfinAccessTokens"); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1700); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1701); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1702); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1703); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1704); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1705); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1706); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1707); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1708); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.Designer.cs b/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.Designer.cs deleted file mode 100644 index 2e1bee3ff..000000000 --- a/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.Designer.cs +++ /dev/null @@ -1,4652 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260105204939_FixLibrarySeedDataCreatedAt")] - partial class FixLibrarySeedDataCreatedAt - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where email templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.cs b/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.cs deleted file mode 100644 index 06edee195..000000000 --- a/src/Melodee.Common/Migrations/20260105204939_FixLibrarySeedDataCreatedAt.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class FixLibrarySeedDataCreatedAt : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - // Update seeded Library records that have CreatedAt set to Unix epoch (1970-01-01) - // to use the current timestamp instead - migrationBuilder.Sql( - """ - UPDATE "Libraries" - SET "CreatedAt" = NOW() - WHERE "CreatedAt" = '1970-01-01 00:00:00+00' - """); - - // Also update seeded Setting records - migrationBuilder.Sql( - """ - UPDATE "Settings" - SET "CreatedAt" = NOW() - WHERE "CreatedAt" = '1970-01-01 00:00:00+00' - """); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - // No rollback needed - the original epoch timestamps were not meaningful - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.Designer.cs b/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.Designer.cs deleted file mode 100644 index 8dc767576..000000000 --- a/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.Designer.cs +++ /dev/null @@ -1,5140 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260109153548_AddPodcastSupport")] - partial class AddPodcastSupport - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "5" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.cs b/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.cs deleted file mode 100644 index 93ad70082..000000000 --- a/src/Melodee.Common/Migrations/20260109153548_AddPodcastSupport.cs +++ /dev/null @@ -1,316 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastSupport : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "PodcastChannels", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - FeedUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - SiteUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - ImageUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - CoverArtLocalPath = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Etag = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - LastModified = table.Column(type: "timestamp with time zone", nullable: true), - LastSyncAt = table.Column(type: "timestamp with time zone", nullable: true), - LastSyncAttemptAt = table.Column(type: "timestamp with time zone", nullable: true), - LastSyncError = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - ConsecutiveFailureCount = table.Column(type: "integer", nullable: false), - NextSyncAt = table.Column(type: "timestamp with time zone", nullable: true), - IsDeleted = table.Column(type: "boolean", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PodcastChannels", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "SmartPlaylists", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - MqlQuery = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), - EntityType = table.Column(type: "character varying(20)", maxLength: 20, nullable: false), - LastResultCount = table.Column(type: "integer", nullable: false), - LastEvaluatedAt = table.Column(type: "timestamp with time zone", nullable: true), - IsPublic = table.Column(type: "boolean", nullable: false), - NormalizedQuery = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_SmartPlaylists", x => x.Id); - table.ForeignKey( - name: "FK_SmartPlaylists_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PodcastEpisodes", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PodcastChannelId = table.Column(type: "integer", nullable: false), - Guid = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - PublishDate = table.Column(type: "timestamp with time zone", nullable: true), - EnclosureUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - EnclosureLength = table.Column(type: "bigint", nullable: true), - MimeType = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - EpisodeKey = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), - DownloadStatus = table.Column(type: "integer", nullable: false), - DownloadError = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - LocalPath = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - LocalFileSize = table.Column(type: "bigint", nullable: true), - Duration = table.Column(type: "interval", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PodcastEpisodes", x => x.Id); - table.ForeignKey( - name: "FK_PodcastEpisodes_PodcastChannels_PodcastChannelId", - column: x => x.PodcastChannelId, - principalTable: "PodcastChannels", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 6, - column: "Description", - value: "Library where templates are stored, organized by language code."); - - migrationBuilder.InsertData( - table: "Libraries", - columns: new[] { "Id", "AlbumCount", "ApiKey", "ArtistCount", "CreatedAt", "Description", "IsLocked", "LastScanAt", "LastUpdatedAt", "Name", "Notes", "Path", "SongCount", "SortOrder", "Tags", "Type" }, - values: new object[] { 7, null, new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where podcast media files are stored.", false, null, null, "Podcasts", null, "/storage/podcasts/", null, 0, null, 8 }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1800, new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), 15, "Enable podcast support.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.enabled", null, null, 0, null, "true" }, - { 1801, new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), 15, "Allow HTTP (non-secure) URLs for podcast feeds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.allowHttp", null, null, 0, null, "false" }, - { 1802, new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), 15, "Timeout in seconds for HTTP requests to podcast feeds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.timeoutSeconds", null, null, 0, null, "30" }, - { 1803, new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), 15, "Maximum number of HTTP redirects to follow for podcast feeds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.maxRedirects", null, null, 0, null, "5" }, - { 1804, new Guid("13168117-a286-23b5-5858-9f91485c6432"), 15, "Maximum size in bytes for podcast feed responses.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.maxFeedBytes", null, null, 0, null, "10485760" }, - { 1805, new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), 15, "Maximum number of episodes to store per podcast channel.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.refresh.maxItemsPerChannel", null, null, 0, null, "500" }, - { 1806, new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), 15, "Maximum concurrent podcast episode downloads (global).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxConcurrent.global", null, null, 0, null, "2" }, - { 1807, new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), 15, "Maximum concurrent podcast episode downloads per user.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxConcurrent.perUser", null, null, 0, null, "1" }, - { 1808, new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), 15, "Maximum size in bytes for podcast episode downloads.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxEnclosureBytes", null, null, 0, null, "2147483648" }, - { 1850, new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), 14, "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastRefresh.cronExpression", null, null, 0, null, "0 */15 * ? * *" }, - { 1851, new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), 14, "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastDownload.cronExpression", null, null, 0, null, "0 */5 * ? * *" } - }); - - migrationBuilder.CreateIndex( - name: "IX_PodcastChannels_ApiKey", - table: "PodcastChannels", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PodcastChannels_IsDeleted", - table: "PodcastChannels", - column: "IsDeleted"); - - migrationBuilder.CreateIndex( - name: "IX_PodcastChannels_NextSyncAt", - table: "PodcastChannels", - column: "NextSyncAt"); - - migrationBuilder.CreateIndex( - name: "IX_PodcastChannels_UserId_FeedUrl", - table: "PodcastChannels", - columns: new[] { "UserId", "FeedUrl" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodes_ApiKey", - table: "PodcastEpisodes", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodes_PodcastChannelId_DownloadStatus", - table: "PodcastEpisodes", - columns: new[] { "PodcastChannelId", "DownloadStatus" }); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodes_PodcastChannelId_EpisodeKey", - table: "PodcastEpisodes", - columns: new[] { "PodcastChannelId", "EpisodeKey" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodes_PodcastChannelId_PublishDate", - table: "PodcastEpisodes", - columns: new[] { "PodcastChannelId", "PublishDate" }); - - migrationBuilder.CreateIndex( - name: "IX_SmartPlaylists_ApiKey", - table: "SmartPlaylists", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_SmartPlaylists_IsPublic", - table: "SmartPlaylists", - column: "IsPublic"); - - migrationBuilder.CreateIndex( - name: "IX_SmartPlaylists_UserId", - table: "SmartPlaylists", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_SmartPlaylists_UserId_Name", - table: "SmartPlaylists", - columns: new[] { "UserId", "Name" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PodcastEpisodes"); - - migrationBuilder.DropTable( - name: "SmartPlaylists"); - - migrationBuilder.DropTable( - name: "PodcastChannels"); - - migrationBuilder.DeleteData( - table: "Libraries", - keyColumn: "Id", - keyValue: 7); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1709); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1710); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1711); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1800); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1801); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1802); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1803); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1804); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1805); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1806); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1807); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1808); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1850); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1851); - - migrationBuilder.UpdateData( - table: "Libraries", - keyColumn: "Id", - keyValue: 6, - column: "Description", - value: "Library where email templates are stored, organized by language code."); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.Designer.cs b/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.Designer.cs deleted file mode 100644 index 92594835b..000000000 --- a/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.Designer.cs +++ /dev/null @@ -1,5200 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260109171301_AddPodcastOpSettings")] - partial class AddPodcastOpSettings - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "5" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.cs b/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.cs deleted file mode 100644 index dd92a5599..000000000 --- a/src/Melodee.Common/Migrations/20260109171301_AddPodcastOpSettings.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastOpSettings : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1809, new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), 15, "Number of days to keep downloaded episodes. 0 to disable retention.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.downloadedEpisodesInDays", null, null, 0, null, "0" }, - { 1810, new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), 15, "Threshold in minutes to consider a downloading episode as stuck.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.recovery.stuckDownloadThresholdMinutes", null, null, 0, null, "60" }, - { 1811, new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), 15, "Threshold in hours to consider a temporary file orphaned.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.recovery.orphanedUsageThresholdHours", null, null, 0, null, "12" }, - { 1852, new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), 14, "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastCleanup.cronExpression", null, null, 0, null, "0 0 2 * * ?" }, - { 1853, new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), 14, "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastRecovery.cronExpression", null, null, 0, null, "0 */30 * ? * *" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1809); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1810); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1811); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1852); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1853); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.Designer.cs b/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.Designer.cs deleted file mode 100644 index f449afa1e..000000000 --- a/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.Designer.cs +++ /dev/null @@ -1,5212 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260109173703_UpdatePodcastOpSettings")] - partial class UpdatePodcastOpSettings - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "5" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.cs b/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.cs deleted file mode 100644 index 5efc0d984..000000000 --- a/src/Melodee.Common/Migrations/20260109173703_UpdatePodcastOpSettings.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class UpdatePodcastOpSettings : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 1812, new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), 15, "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.quota.maxBytesPerUser", null, null, 0, null, "5368709120" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1812); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.Designer.cs b/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.Designer.cs deleted file mode 100644 index 7baaa281a..000000000 --- a/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.Designer.cs +++ /dev/null @@ -1,5220 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260109175659_AddPodcastTitleNormalizedColumns")] - partial class AddPodcastTitleNormalizedColumns - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "5" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.cs b/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.cs deleted file mode 100644 index 104374030..000000000 --- a/src/Melodee.Common/Migrations/20260109175659_AddPodcastTitleNormalizedColumns.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastTitleNormalizedColumns : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "TitleNormalized", - table: "PodcastEpisodes", - type: "character varying(255)", - maxLength: 255, - nullable: true); - - migrationBuilder.AddColumn( - name: "TitleNormalized", - table: "PodcastChannels", - type: "character varying(255)", - maxLength: 255, - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "TitleNormalized", - table: "PodcastEpisodes"); - - migrationBuilder.DropColumn( - name: "TitleNormalized", - table: "PodcastChannels"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.Designer.cs b/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.Designer.cs deleted file mode 100644 index 1e44d5cb3..000000000 --- a/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.Designer.cs +++ /dev/null @@ -1,5346 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260109211500_AddPodcastPlaybackTracking")] - partial class AddPodcastPlaybackTracking - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "5" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.cs b/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.cs deleted file mode 100644 index 1966d77e1..000000000 --- a/src/Melodee.Common/Migrations/20260109211500_AddPodcastPlaybackTracking.cs +++ /dev/null @@ -1,111 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastPlaybackTracking : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "PodcastEpisodeBookmarks", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - PodcastEpisodeId = table.Column(type: "integer", nullable: false), - PositionSeconds = table.Column(type: "integer", nullable: false), - Comment = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PodcastEpisodeBookmarks", x => x.Id); - table.ForeignKey( - name: "FK_PodcastEpisodeBookmarks_PodcastEpisodes_PodcastEpisodeId", - column: x => x.PodcastEpisodeId, - principalTable: "PodcastEpisodes", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PodcastEpisodeBookmarks_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserPodcastEpisodePlayHistories", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - PodcastEpisodeId = table.Column(type: "integer", nullable: false), - PlayedAt = table.Column(type: "timestamp with time zone", nullable: false), - Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ByUserAgent = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - SecondsPlayed = table.Column(type: "integer", nullable: true), - Source = table.Column(type: "smallint", nullable: false), - IsNowPlaying = table.Column(type: "boolean", nullable: false), - LastHeartbeatAt = table.Column(type: "timestamp with time zone", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserPodcastEpisodePlayHistories", x => x.Id); - table.ForeignKey( - name: "FK_UserPodcastEpisodePlayHistories_PodcastEpisodes_PodcastEpis~", - column: x => x.PodcastEpisodeId, - principalTable: "PodcastEpisodes", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserPodcastEpisodePlayHistories_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodeBookmarks_PodcastEpisodeId", - table: "PodcastEpisodeBookmarks", - column: "PodcastEpisodeId"); - - migrationBuilder.CreateIndex( - name: "IX_PodcastEpisodeBookmarks_UserId_PodcastEpisodeId", - table: "PodcastEpisodeBookmarks", - columns: new[] { "UserId", "PodcastEpisodeId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserPodcastEpisodePlayHistories_PodcastEpisodeId_PlayedAt", - table: "UserPodcastEpisodePlayHistories", - columns: new[] { "PodcastEpisodeId", "PlayedAt" }); - - migrationBuilder.CreateIndex( - name: "IX_UserPodcastEpisodePlayHistories_UserId_PodcastEpisodeId_Pla~", - table: "UserPodcastEpisodePlayHistories", - columns: new[] { "UserId", "PodcastEpisodeId", "PlayedAt" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PodcastEpisodeBookmarks"); - - migrationBuilder.DropTable( - name: "UserPodcastEpisodePlayHistories"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.Designer.cs b/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.Designer.cs deleted file mode 100644 index 7fd1ad91d..000000000 --- a/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.Designer.cs +++ /dev/null @@ -1,5346 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110160230_ChangePodcastEpisodePublishDateToInstant")] - partial class ChangePodcastEpisodePublishDateToInstant - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.cs b/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.cs deleted file mode 100644 index 523c2aa6f..000000000 --- a/src/Melodee.Common/Migrations/20260110160230_ChangePodcastEpisodePublishDateToInstant.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class ChangePodcastEpisodePublishDateToInstant : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1803, - columns: new[] { "Comment", "Value" }, - values: new object[] { "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", "10" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1803, - columns: new[] { "Comment", "Value" }, - values: new object[] { "Maximum number of HTTP redirects to follow for podcast feeds.", "5" }); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.Designer.cs b/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.Designer.cs deleted file mode 100644 index 7d25c2180..000000000 --- a/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.Designer.cs +++ /dev/null @@ -1,5379 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110161448_AddPodcastPhase2Features")] - partial class AddPodcastPhase2Features - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.cs b/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.cs deleted file mode 100644 index aa67ff97c..000000000 --- a/src/Melodee.Common/Migrations/20260110161448_AddPodcastPhase2Features.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastPhase2Features : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "QueuedAt", - table: "PodcastEpisodes", - type: "timestamp with time zone", - nullable: true); - - migrationBuilder.AddColumn( - name: "MaxDownloadedEpisodes", - table: "PodcastChannels", - type: "integer", - nullable: true); - - migrationBuilder.AddColumn( - name: "MaxStorageBytes", - table: "PodcastChannels", - type: "bigint", - nullable: true); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1813, new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), 15, "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.keepLastNEpisodes", null, null, 0, null, "0" }, - { 1814, new Guid("3da9402e-9566-c883-66e5-d232de677199"), 15, "Delete downloaded episodes after they have been played. false to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.keepUnplayedOnly", null, null, 0, null, "false" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1813); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1814); - - migrationBuilder.DropColumn( - name: "QueuedAt", - table: "PodcastEpisodes"); - - migrationBuilder.DropColumn( - name: "MaxDownloadedEpisodes", - table: "PodcastChannels"); - - migrationBuilder.DropColumn( - name: "MaxStorageBytes", - table: "PodcastChannels"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.Designer.cs b/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.Designer.cs deleted file mode 100644 index 8365570f3..000000000 --- a/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.Designer.cs +++ /dev/null @@ -1,5385 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110163430_AddPodcastAutoDownloadAndRefreshInterval")] - partial class AddPodcastAutoDownloadAndRefreshInterval - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.cs b/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.cs deleted file mode 100644 index 8c8ff592a..000000000 --- a/src/Melodee.Common/Migrations/20260110163430_AddPodcastAutoDownloadAndRefreshInterval.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPodcastAutoDownloadAndRefreshInterval : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "AutoDownloadEnabled", - table: "PodcastChannels", - type: "boolean", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "RefreshIntervalHours", - table: "PodcastChannels", - type: "integer", - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "AutoDownloadEnabled", - table: "PodcastChannels"); - - migrationBuilder.DropColumn( - name: "RefreshIntervalHours", - table: "PodcastChannels"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.Designer.cs b/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.Designer.cs deleted file mode 100644 index b2865ef2e..000000000 --- a/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.Designer.cs +++ /dev/null @@ -1,5821 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110183656_Init_PartyMode")] - partial class Init_PartyMode - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.cs b/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.cs deleted file mode 100644 index 9cebf9878..000000000 --- a/src/Melodee.Common/Migrations/20260110183656_Init_PartyMode.cs +++ /dev/null @@ -1,355 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class Init_PartyMode : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "PartySessionEndpoints", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - OwnerUserId = table.Column(type: "integer", nullable: true), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Type = table.Column(type: "integer", nullable: false), - CapabilitiesJson = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - LastSeenAt = table.Column(type: "timestamp with time zone", nullable: true), - IsShared = table.Column(type: "boolean", nullable: false), - Room = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PartySessionEndpoints", x => x.Id); - table.ForeignKey( - name: "FK_PartySessionEndpoints_Users_OwnerUserId", - column: x => x.OwnerUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }); - - migrationBuilder.CreateTable( - name: "PartySessions", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - OwnerUserId = table.Column(type: "integer", nullable: false), - Status = table.Column(type: "integer", nullable: false), - JoinCodeHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), - ActiveEndpointId = table.Column(type: "uuid", nullable: true), - ActiveEndpointId1 = table.Column(type: "integer", nullable: true), - QueueRevision = table.Column(type: "bigint", nullable: false), - PlaybackRevision = table.Column(type: "bigint", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PartySessions", x => x.Id); - table.ForeignKey( - name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId1", - column: x => x.ActiveEndpointId1, - principalTable: "PartySessionEndpoints", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_PartySessions_Users_OwnerUserId", - column: x => x.OwnerUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PartyQueueItems", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PartySessionId = table.Column(type: "integer", nullable: false), - SongApiKey = table.Column(type: "uuid", nullable: false), - EnqueuedByUserId = table.Column(type: "integer", nullable: false), - EnqueuedAt = table.Column(type: "timestamp with time zone", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - Source = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Note = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PartyQueueItems", x => x.Id); - table.UniqueConstraint("AK_PartyQueueItems_ApiKey", x => x.ApiKey); - table.ForeignKey( - name: "FK_PartyQueueItems_PartySessions_PartySessionId", - column: x => x.PartySessionId, - principalTable: "PartySessions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PartyQueueItems_Users_EnqueuedByUserId", - column: x => x.EnqueuedByUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "PartySessionParticipants", - columns: table => new - { - PartySessionId = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "integer", nullable: false), - Role = table.Column(type: "integer", nullable: false), - JoinedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastSeenAt = table.Column(type: "timestamp with time zone", nullable: true), - IsBanned = table.Column(type: "boolean", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PartySessionParticipants", x => new { x.PartySessionId, x.UserId }); - table.ForeignKey( - name: "FK_PartySessionParticipants_PartySessions_PartySessionId", - column: x => x.PartySessionId, - principalTable: "PartySessions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PartySessionParticipants_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PartyPlaybackStates", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PartySessionId = table.Column(type: "integer", nullable: false), - CurrentQueueItemApiKey = table.Column(type: "uuid", nullable: true), - PositionSeconds = table.Column(type: "double precision", nullable: false), - IsPlaying = table.Column(type: "boolean", nullable: false), - Volume = table.Column(type: "double precision", nullable: true), - LastHeartbeatAt = table.Column(type: "timestamp with time zone", nullable: true), - UpdatedByUserId = table.Column(type: "integer", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PartyPlaybackStates", x => x.Id); - table.ForeignKey( - name: "FK_PartyPlaybackStates_PartyQueueItems_CurrentQueueItemApiKey", - column: x => x.CurrentQueueItemApiKey, - principalTable: "PartyQueueItems", - principalColumn: "ApiKey", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_PartyPlaybackStates_PartySessions_PartySessionId", - column: x => x.PartySessionId, - principalTable: "PartySessions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PartyPlaybackStates_Users_UpdatedByUserId", - column: x => x.UpdatedByUserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_ApiKey", - table: "PartyPlaybackStates", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_CurrentQueueItemApiKey", - table: "PartyPlaybackStates", - column: "CurrentQueueItemApiKey"); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_IsPlaying", - table: "PartyPlaybackStates", - column: "IsPlaying"); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_LastHeartbeatAt", - table: "PartyPlaybackStates", - column: "LastHeartbeatAt"); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_PartySessionId", - table: "PartyPlaybackStates", - column: "PartySessionId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartyPlaybackStates_UpdatedByUserId", - table: "PartyPlaybackStates", - column: "UpdatedByUserId"); - - migrationBuilder.CreateIndex( - name: "IX_PartyQueueItems_ApiKey", - table: "PartyQueueItems", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartyQueueItems_EnqueuedAt", - table: "PartyQueueItems", - column: "EnqueuedAt"); - - migrationBuilder.CreateIndex( - name: "IX_PartyQueueItems_EnqueuedByUserId", - table: "PartyQueueItems", - column: "EnqueuedByUserId"); - - migrationBuilder.CreateIndex( - name: "IX_PartyQueueItems_PartySessionId_SortOrder", - table: "PartyQueueItems", - columns: new[] { "PartySessionId", "SortOrder" }); - - migrationBuilder.CreateIndex( - name: "IX_PartyQueueItems_SongApiKey", - table: "PartyQueueItems", - column: "SongApiKey"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_ApiKey", - table: "PartySessionEndpoints", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_IsShared", - table: "PartySessionEndpoints", - column: "IsShared"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_LastSeenAt", - table: "PartySessionEndpoints", - column: "LastSeenAt"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_OwnerUserId", - table: "PartySessionEndpoints", - column: "OwnerUserId"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_Room", - table: "PartySessionEndpoints", - column: "Room"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionEndpoints_Type", - table: "PartySessionEndpoints", - column: "Type"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionParticipants_IsBanned", - table: "PartySessionParticipants", - column: "IsBanned"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionParticipants_PartySessionId_UserId", - table: "PartySessionParticipants", - columns: new[] { "PartySessionId", "UserId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionParticipants_Role", - table: "PartySessionParticipants", - column: "Role"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessionParticipants_UserId", - table: "PartySessionParticipants", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_ActiveEndpointId", - table: "PartySessions", - column: "ActiveEndpointId"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_ActiveEndpointId1", - table: "PartySessions", - column: "ActiveEndpointId1"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_ApiKey", - table: "PartySessions", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_OwnerUserId", - table: "PartySessions", - column: "OwnerUserId"); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_Status", - table: "PartySessions", - column: "Status"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PartyPlaybackStates"); - - migrationBuilder.DropTable( - name: "PartySessionParticipants"); - - migrationBuilder.DropTable( - name: "PartyQueueItems"); - - migrationBuilder.DropTable( - name: "PartySessions"); - - migrationBuilder.DropTable( - name: "PartySessionEndpoints"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.Designer.cs b/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.Designer.cs deleted file mode 100644 index 1cbc57fea..000000000 --- a/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.Designer.cs +++ /dev/null @@ -1,179 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using Melodee.Common.Data; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110183700_Phase3_EndpointRegistry")] - partial class Phase3_EndpointRegistry - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("Message") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MetadataJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedAt"); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.cs b/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.cs deleted file mode 100644 index 0c8ca8555..000000000 --- a/src/Melodee.Common/Migrations/20260110183700_Phase3_EndpointRegistry.cs +++ /dev/null @@ -1,81 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class Phase3_EndpointRegistry : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "IsEndpointOffline", - table: "PartySessions", - type: "boolean", - nullable: false, - defaultValue: false); - - migrationBuilder.CreateTable( - name: "PartyAuditEvents", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PartySessionId = table.Column(type: "integer", nullable: false), - EventType = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "integer", nullable: true), - Message = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - MetadataJson = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PartyAuditEvents", x => x.Id); - table.ForeignKey( - name: "FK_PartyAuditEvents_PartySessions_PartySessionId", - column: x => x.PartySessionId, - principalTable: "PartySessions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_PartyAuditEvents_ApiKey", - table: "PartyAuditEvents", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PartyAuditEvents_CreatedAt", - table: "PartyAuditEvents", - column: "CreatedAt"); - - migrationBuilder.CreateIndex( - name: "IX_PartyAuditEvents_PartySessionId", - table: "PartyAuditEvents", - column: "PartySessionId"); - - migrationBuilder.CreateIndex( - name: "IX_PartyAuditEvents_UserId", - table: "PartyAuditEvents", - column: "UserId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PartyAuditEvents"); - - migrationBuilder.DropColumn( - name: "IsEndpointOffline", - table: "PartySessions"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.Designer.cs b/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.Designer.cs deleted file mode 100644 index 6c90018c2..000000000 --- a/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.Designer.cs +++ /dev/null @@ -1,5821 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260110205558_Phase2_PartyMode_Updates")] - partial class Phase2_PartyMode_Updates - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.cs b/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.cs deleted file mode 100644 index e46495ea0..000000000 --- a/src/Melodee.Common/Migrations/20260110205558_Phase2_PartyMode_Updates.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class Phase2_PartyMode_Updates : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.Designer.cs b/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.Designer.cs deleted file mode 100644 index 83bf5722f..000000000 --- a/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.Designer.cs +++ /dev/null @@ -1,5930 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260111141134_AddJukeboxSettings")] - partial class AddJukeboxSettings - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.cs b/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.cs deleted file mode 100644 index 70eb1ae4c..000000000 --- a/src/Melodee.Common/Migrations/20260111141134_AddJukeboxSettings.cs +++ /dev/null @@ -1,130 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddJukeboxSettings : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - // Drop index if exists (safe for re-running) - migrationBuilder.Sql(@" - DROP INDEX IF EXISTS ""IX_PartyAuditEvents_CreatedAt""; - "); - - // Drop column if exists - migrationBuilder.Sql(@" - ALTER TABLE ""PartyAuditEvents"" DROP COLUMN IF EXISTS ""Message""; - "); - - // Rename column if it exists and new name doesn't exist - migrationBuilder.Sql(@" - DO $$ - BEGIN - IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'PartyAuditEvents' AND column_name = 'MetadataJson') - AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'PartyAuditEvents' AND column_name = 'PayloadJson') THEN - ALTER TABLE ""PartyAuditEvents"" RENAME COLUMN ""MetadataJson"" TO ""PayloadJson""; - END IF; - END $$; - "); - - // Add column if not exists - migrationBuilder.Sql(@" - ALTER TABLE ""PartySessions"" ADD COLUMN IF NOT EXISTS ""IsQueueLocked"" boolean NOT NULL DEFAULT false; - "); - - // Alter column (UserId to not nullable) - this is idempotent - migrationBuilder.Sql(@" - ALTER TABLE ""PartyAuditEvents"" ALTER COLUMN ""UserId"" SET NOT NULL; - ALTER TABLE ""PartyAuditEvents"" ALTER COLUMN ""UserId"" SET DEFAULT 0; - "); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1900, new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), 16, "Enable Jukebox support for server-side playback.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jukebox.enabled", null, null, 0, null, "false" }, - { 1901, new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), 16, "The type of backend to use for jukebox playback (e.g., 'mpv'). Leave empty for no backend.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jukebox.backendType", null, null, 0, null, "" } - }); - - // Add foreign keys only if they don't exist - migrationBuilder.Sql(@" - DO $$ - BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_PartyAuditEvents_PartySessions_PartySessionId') THEN - ALTER TABLE ""PartyAuditEvents"" ADD CONSTRAINT ""FK_PartyAuditEvents_PartySessions_PartySessionId"" - FOREIGN KEY (""PartySessionId"") REFERENCES ""PartySessions"" (""Id"") ON DELETE CASCADE; - END IF; - END $$; - "); - - migrationBuilder.Sql(@" - DO $$ - BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_PartyAuditEvents_Users_UserId') THEN - ALTER TABLE ""PartyAuditEvents"" ADD CONSTRAINT ""FK_PartyAuditEvents_Users_UserId"" - FOREIGN KEY (""UserId"") REFERENCES ""Users"" (""Id"") ON DELETE CASCADE; - END IF; - END $$; - "); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_PartyAuditEvents_PartySessions_PartySessionId", - table: "PartyAuditEvents"); - - migrationBuilder.DropForeignKey( - name: "FK_PartyAuditEvents_Users_UserId", - table: "PartyAuditEvents"); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1900); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1901); - - migrationBuilder.DropColumn( - name: "IsQueueLocked", - table: "PartySessions"); - - migrationBuilder.RenameColumn( - name: "PayloadJson", - table: "PartyAuditEvents", - newName: "MetadataJson"); - - migrationBuilder.AlterColumn( - name: "UserId", - table: "PartyAuditEvents", - type: "integer", - nullable: true, - oldClrType: typeof(int), - oldType: "integer"); - - migrationBuilder.AddColumn( - name: "Message", - table: "PartyAuditEvents", - type: "character varying(2000)", - maxLength: 2000, - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_PartyAuditEvents_CreatedAt", - table: "PartyAuditEvents", - column: "CreatedAt"); - } - } -} - diff --git a/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.Designer.cs b/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.Designer.cs deleted file mode 100644 index 351eda083..000000000 --- a/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.Designer.cs +++ /dev/null @@ -1,6086 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260111142744_AddMpvMpdSettings")] - partial class AddMpvMpdSettings - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1910, - ApiKey = new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), - Category = 16, - Comment = "Path to the MPV executable. Leave empty to use system PATH.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.path", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1911, - ApiKey = new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), - Category = 16, - Comment = "Audio device to use for MPV playback. Leave empty for default device.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.audioDevice", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1912, - ApiKey = new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), - Category = 16, - Comment = "Extra command-line arguments to pass to MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.extraArgs", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1913, - ApiKey = new Guid("45dfa023-d926-4364-33d1-245a9623dece"), - Category = 16, - Comment = "Path for the MPV IPC socket. Leave empty for auto temp directory.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.socketPath", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1914, - ApiKey = new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), - Category = 16, - Comment = "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1915, - ApiKey = new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), - Category = 16, - Comment = "Enable verbose debug output for MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1920, - ApiKey = new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), - Category = 16, - Comment = "Unique name/identifier for this MPD instance (for multi-instance support).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.instanceName", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1921, - ApiKey = new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), - Category = 16, - Comment = "Hostname or IP address of the MPD server.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.host", - SortOrder = 0, - Value = "localhost" - }, - new - { - Id = 1922, - ApiKey = new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), - Category = 16, - Comment = "Port number for MPD connection.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.port", - SortOrder = 0, - Value = "6600" - }, - new - { - Id = 1923, - ApiKey = new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), - Category = 16, - Comment = "Password for MPD authentication. Leave empty if no password.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.password", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1924, - ApiKey = new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), - Category = 16, - Comment = "Timeout for MPD TCP connection and operations in milliseconds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.timeoutMs", - SortOrder = 0, - Value = "10000" - }, - new - { - Id = 1925, - ApiKey = new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), - Category = 16, - Comment = "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1926, - ApiKey = new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), - Category = 16, - Comment = "Enable debug logging for MPD commands.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.enableDebugOutput", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.cs b/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.cs deleted file mode 100644 index 6ae51c135..000000000 --- a/src/Melodee.Common/Migrations/20260111142744_AddMpvMpdSettings.cs +++ /dev/null @@ -1,119 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddMpvMpdSettings : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1901, - column: "Comment", - value: "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend."); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[,] - { - { 1910, new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), 16, "Path to the MPV executable. Leave empty to use system PATH.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.path", null, null, 0, null, "" }, - { 1911, new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), 16, "Audio device to use for MPV playback. Leave empty for default device.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.audioDevice", null, null, 0, null, "" }, - { 1912, new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), 16, "Extra command-line arguments to pass to MPV.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.extraArgs", null, null, 0, null, "" }, - { 1913, new Guid("45dfa023-d926-4364-33d1-245a9623dece"), 16, "Path for the MPV IPC socket. Leave empty for auto temp directory.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.socketPath", null, null, 0, null, "" }, - { 1914, new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), 16, "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.initialVolume", null, null, 0, null, "0.8" }, - { 1915, new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), 16, "Enable verbose debug output for MPV.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.enableDebugOutput", null, null, 0, null, "false" }, - { 1920, new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), 16, "Unique name/identifier for this MPD instance (for multi-instance support).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.instanceName", null, null, 0, null, "" }, - { 1921, new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), 16, "Hostname or IP address of the MPD server.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.host", null, null, 0, null, "localhost" }, - { 1922, new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), 16, "Port number for MPD connection.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.port", null, null, 0, null, "6600" }, - { 1923, new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), 16, "Password for MPD authentication. Leave empty if no password.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.password", null, null, 0, null, "" }, - { 1924, new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), 16, "Timeout for MPD TCP connection and operations in milliseconds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.timeoutMs", null, null, 0, null, "10000" }, - { 1925, new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), 16, "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.initialVolume", null, null, 0, null, "0.8" }, - { 1926, new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), 16, "Enable debug logging for MPD commands.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.enableDebugOutput", null, null, 0, null, "false" } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1910); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1911); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1912); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1913); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1914); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1915); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1920); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1921); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1922); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1923); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1924); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1925); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1926); - - migrationBuilder.UpdateData( - table: "Settings", - keyColumn: "Id", - keyValue: 1901, - column: "Comment", - value: "The type of backend to use for jukebox playback (e.g., 'mpv'). Leave empty for no backend."); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.Designer.cs b/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.Designer.cs deleted file mode 100644 index eed1362fb..000000000 --- a/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.Designer.cs +++ /dev/null @@ -1,6098 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260111225913_AddThemeLibrary")] - partial class AddThemeLibrary - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/storage/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/storage/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/storage/library/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/storage/images/users/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/storage/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/storage/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/storage/podcasts/", - SortOrder = 0, - Type = 8 - }, - new - { - Id = 8, - ApiKey = new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where custom theme packs are stored.", - IsLocked = false, - Name = "Themes", - Path = "/storage/themes/", - SortOrder = 0, - Type = 9 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1910, - ApiKey = new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), - Category = 16, - Comment = "Path to the MPV executable. Leave empty to use system PATH.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.path", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1911, - ApiKey = new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), - Category = 16, - Comment = "Audio device to use for MPV playback. Leave empty for default device.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.audioDevice", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1912, - ApiKey = new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), - Category = 16, - Comment = "Extra command-line arguments to pass to MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.extraArgs", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1913, - ApiKey = new Guid("45dfa023-d926-4364-33d1-245a9623dece"), - Category = 16, - Comment = "Path for the MPV IPC socket. Leave empty for auto temp directory.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.socketPath", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1914, - ApiKey = new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), - Category = 16, - Comment = "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1915, - ApiKey = new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), - Category = 16, - Comment = "Enable verbose debug output for MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1920, - ApiKey = new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), - Category = 16, - Comment = "Unique name/identifier for this MPD instance (for multi-instance support).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.instanceName", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1921, - ApiKey = new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), - Category = 16, - Comment = "Hostname or IP address of the MPD server.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.host", - SortOrder = 0, - Value = "localhost" - }, - new - { - Id = 1922, - ApiKey = new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), - Category = 16, - Comment = "Port number for MPD connection.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.port", - SortOrder = 0, - Value = "6600" - }, - new - { - Id = 1923, - ApiKey = new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), - Category = 16, - Comment = "Password for MPD authentication. Leave empty if no password.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.password", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1924, - ApiKey = new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), - Category = 16, - Comment = "Timeout for MPD TCP connection and operations in milliseconds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.timeoutMs", - SortOrder = 0, - Value = "10000" - }, - new - { - Id = 1925, - ApiKey = new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), - Category = 16, - Comment = "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1926, - ApiKey = new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), - Category = 16, - Comment = "Enable debug logging for MPD commands.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.enableDebugOutput", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.cs b/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.cs deleted file mode 100644 index edcde7054..000000000 --- a/src/Melodee.Common/Migrations/20260111225913_AddThemeLibrary.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddThemeLibrary : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Libraries", - columns: new[] { "Id", "AlbumCount", "ApiKey", "ArtistCount", "CreatedAt", "Description", "IsLocked", "LastScanAt", "LastUpdatedAt", "Name", "Notes", "Path", "SongCount", "SortOrder", "Tags", "Type" }, - values: new object[] { 8, null, new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where custom theme packs are stored.", false, null, null, "Themes", null, "/storage/themes/", null, 0, null, 9 }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Libraries", - keyColumn: "Id", - keyValue: 8); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.Designer.cs b/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.Designer.cs deleted file mode 100644 index af4b33feb..000000000 --- a/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.Designer.cs +++ /dev/null @@ -1,6110 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260113221600_AddPasswordHashAndOpenSubsonicSecret")] - partial class AddPasswordHashAndOpenSubsonicSecret - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/app/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/app/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/app/storage/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/app/user-images/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/app/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/app/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/app/podcasts/", - SortOrder = 0, - Type = 8 - }, - new - { - Id = 8, - ApiKey = new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where custom theme packs are stored.", - IsLocked = false, - Name = "Themes", - Path = "/app/themes/", - SortOrder = 0, - Type = 9 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1910, - ApiKey = new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), - Category = 16, - Comment = "Path to the MPV executable. Leave empty to use system PATH.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.path", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1911, - ApiKey = new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), - Category = 16, - Comment = "Audio device to use for MPV playback. Leave empty for default device.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.audioDevice", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1912, - ApiKey = new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), - Category = 16, - Comment = "Extra command-line arguments to pass to MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.extraArgs", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1913, - ApiKey = new Guid("45dfa023-d926-4364-33d1-245a9623dece"), - Category = 16, - Comment = "Path for the MPV IPC socket. Leave empty for auto temp directory.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.socketPath", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1914, - ApiKey = new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), - Category = 16, - Comment = "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1915, - ApiKey = new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), - Category = 16, - Comment = "Enable verbose debug output for MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1920, - ApiKey = new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), - Category = 16, - Comment = "Unique name/identifier for this MPD instance (for multi-instance support).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.instanceName", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1921, - ApiKey = new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), - Category = 16, - Comment = "Hostname or IP address of the MPD server.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.host", - SortOrder = 0, - Value = "localhost" - }, - new - { - Id = 1922, - ApiKey = new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), - Category = 16, - Comment = "Port number for MPD connection.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.port", - SortOrder = 0, - Value = "6600" - }, - new - { - Id = 1923, - ApiKey = new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), - Category = 16, - Comment = "Password for MPD authentication. Leave empty if no password.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.password", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1924, - ApiKey = new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), - Category = 16, - Comment = "Timeout for MPD TCP connection and operations in milliseconds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.timeoutMs", - SortOrder = 0, - Value = "10000" - }, - new - { - Id = 1925, - ApiKey = new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), - Category = 16, - Comment = "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1926, - ApiKey = new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), - Category = 16, - Comment = "Enable debug logging for MPD commands.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.enableDebugOutput", - SortOrder = 0, - Value = "false" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OpenSubsonicSecretProtected") - .HasMaxLength(2048) - .HasColumnType("character varying(2048)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHash") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHashAlgorithm") - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.cs b/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.cs deleted file mode 100644 index 462efbc88..000000000 --- a/src/Melodee.Common/Migrations/20260113221600_AddPasswordHashAndOpenSubsonicSecret.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPasswordHashAndOpenSubsonicSecret : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "OpenSubsonicSecretProtected", - table: "Users", - type: "character varying(2048)", - maxLength: 2048, - nullable: true); - - migrationBuilder.AddColumn( - name: "PasswordHash", - table: "Users", - type: "character varying(255)", - maxLength: 255, - nullable: true); - - migrationBuilder.AddColumn( - name: "PasswordHashAlgorithm", - table: "Users", - type: "character varying(32)", - maxLength: 32, - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "OpenSubsonicSecretProtected", - table: "Users"); - - migrationBuilder.DropColumn( - name: "PasswordHash", - table: "Users"); - - migrationBuilder.DropColumn( - name: "PasswordHashAlgorithm", - table: "Users"); - - } - } -} diff --git a/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.Designer.cs b/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.Designer.cs deleted file mode 100644 index 9735d3e7c..000000000 --- a/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.Designer.cs +++ /dev/null @@ -1,6237 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260116155638_AddUserDeviceProfiles")] - partial class AddUserDeviceProfiles - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/app/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/app/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/app/storage/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/app/user-images/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/app/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/app/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/app/podcasts/", - SortOrder = 0, - Type = 8 - }, - new - { - Id = 8, - ApiKey = new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where custom theme packs are stored.", - IsLocked = false, - Name = "Themes", - Path = "/app/themes/", - SortOrder = 0, - Type = 9 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CreatedAt"); - - b.HasIndex("ForAlbumId"); - - b.HasIndex("ForArtistId"); - - b.HasIndex("LibraryId"); - - b.HasIndex("LibraryId", "CreatedAt"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("PartySessionId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("SortOrder"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ActiveEndpointId1") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ActiveEndpointId1"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1910, - ApiKey = new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), - Category = 16, - Comment = "Path to the MPV executable. Leave empty to use system PATH.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.path", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1911, - ApiKey = new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), - Category = 16, - Comment = "Audio device to use for MPV playback. Leave empty for default device.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.audioDevice", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1912, - ApiKey = new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), - Category = 16, - Comment = "Extra command-line arguments to pass to MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.extraArgs", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1913, - ApiKey = new Guid("45dfa023-d926-4364-33d1-245a9623dece"), - Category = 16, - Comment = "Path for the MPV IPC socket. Leave empty for auto temp directory.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.socketPath", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1914, - ApiKey = new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), - Category = 16, - Comment = "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1915, - ApiKey = new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), - Category = 16, - Comment = "Enable verbose debug output for MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1920, - ApiKey = new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), - Category = 16, - Comment = "Unique name/identifier for this MPD instance (for multi-instance support).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.instanceName", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1921, - ApiKey = new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), - Category = 16, - Comment = "Hostname or IP address of the MPD server.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.host", - SortOrder = 0, - Value = "localhost" - }, - new - { - Id = 1922, - ApiKey = new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), - Category = 16, - Comment = "Port number for MPD connection.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.port", - SortOrder = 0, - Value = "6600" - }, - new - { - Id = 1923, - ApiKey = new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), - Category = 16, - Comment = "Password for MPD authentication. Leave empty if no password.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.password", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1924, - ApiKey = new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), - Category = 16, - Comment = "Timeout for MPD TCP connection and operations in milliseconds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.timeoutMs", - SortOrder = 0, - Value = "10000" - }, - new - { - Id = 1925, - ApiKey = new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), - Category = 16, - Comment = "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1926, - ApiKey = new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), - Category = 16, - Comment = "Enable debug logging for MPD commands.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1927, - ApiKey = new Guid("df8f5291-a7c1-797c-1dea-5d302116b2c9"), - Category = 11, - Comment = "Enable per-user and per-device transcoding profiles.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userDeviceProfile.enabled", - SortOrder = 0, - Value = "true" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OpenSubsonicSecretProtected") - .HasMaxLength(2048) - .HasColumnType("character varying(2048)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHash") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHashAlgorithm") - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserDeviceProfile", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DirectPlay") - .HasColumnType("boolean"); - - b.Property("IsDefaultProfile") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitrate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayerId") - .HasColumnType("integer"); - - b.Property("Priority") - .HasColumnType("integer"); - - b.Property("ResampleRate") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TargetCodec") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PlayerId"); - - b.HasIndex("UserId", "IsDefaultProfile"); - - b.HasIndex("UserId", "PlayerId") - .IsUnique(); - - b.ToTable("UserDeviceProfiles"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("IsNowPlaying"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId1"); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserDeviceProfile", b => - { - b.HasOne("Melodee.Common.Data.Models.Player", "Player") - .WithMany() - .HasForeignKey("PlayerId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Player"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.cs b/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.cs deleted file mode 100644 index 9744660f6..000000000 --- a/src/Melodee.Common/Migrations/20260116155638_AddUserDeviceProfiles.cs +++ /dev/null @@ -1,95 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserDeviceProfiles : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "UserDeviceProfiles", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - PlayerId = table.Column(type: "integer", nullable: true), - IsDefaultProfile = table.Column(type: "boolean", nullable: false), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - DirectPlay = table.Column(type: "boolean", nullable: false), - TargetCodec = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - MaxBitrate = table.Column(type: "integer", nullable: true), - ResampleRate = table.Column(type: "integer", nullable: true), - Priority = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserDeviceProfiles", x => x.Id); - table.ForeignKey( - name: "FK_UserDeviceProfiles_Players_PlayerId", - column: x => x.PlayerId, - principalTable: "Players", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_UserDeviceProfiles_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "Settings", - columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, - values: new object[] { 1929, new Guid("df8f5291-a7c1-797c-1dea-5d302116b2c9"), 11, "Enable per-user and per-device transcoding profiles.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "userDeviceProfile.enabled", null, null, 0, null, "true" }); - - migrationBuilder.CreateIndex( - name: "IX_UserDeviceProfiles_ApiKey", - table: "UserDeviceProfiles", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserDeviceProfiles_PlayerId", - table: "UserDeviceProfiles", - column: "PlayerId"); - - migrationBuilder.CreateIndex( - name: "IX_UserDeviceProfiles_UserId_IsDefaultProfile", - table: "UserDeviceProfiles", - columns: new[] { "UserId", "IsDefaultProfile" }); - - migrationBuilder.CreateIndex( - name: "IX_UserDeviceProfiles_UserId_PlayerId", - table: "UserDeviceProfiles", - columns: new[] { "UserId", "PlayerId" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "UserDeviceProfiles"); - - migrationBuilder.DeleteData( - table: "Settings", - keyColumn: "Id", - keyValue: 1929); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.Designer.cs b/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.Designer.cs deleted file mode 100644 index 84795d44d..000000000 --- a/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.Designer.cs +++ /dev/null @@ -1,6458 +0,0 @@ -// -using System; -using Melodee.Common.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - [DbContext(typeof(MelodeeDbContext))] - [Migration("20260116202735_AddUserLibraryACL")] - partial class AddUserLibraryACL - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumStatus") - .HasColumnType("smallint"); - - b.Property("AlbumType") - .HasColumnType("smallint"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsCompilation") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OriginalReleaseDate") - .HasColumnType("date"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReleaseDate") - .HasColumnType("date"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("ArtistId", "Name") - .IsUnique(); - - b.HasIndex("ArtistId", "NameNormalized") - .IsUnique(); - - b.HasIndex("ArtistId", "SortName") - .IsUnique(); - - b.ToTable("Albums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Biography") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Directory") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("MetaDataStatus") - .HasColumnType("integer"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("RealName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Roles") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("NameNormalized"); - - b.HasIndex("SortName"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.ToTable("Artists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ArtistRelationType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RelatedArtistId") - .HasColumnType("integer"); - - b.Property("RelationEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("RelationStart") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("RelatedArtistId"); - - b.HasIndex("ArtistId", "RelatedArtistId") - .IsUnique(); - - b.ToTable("ArtistRelation"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("Bookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsGeneratedPlaylistEnabled") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVisible") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SourceName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SourceUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Year") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Slug") - .IsUnique(); - - b.ToTable("Charts"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ChartId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LinkConfidence") - .HasColumnType("numeric"); - - b.Property("LinkNotes") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LinkStatus") - .HasColumnType("smallint"); - - b.Property("LinkedAlbumId") - .HasColumnType("integer"); - - b.Property("LinkedArtistId") - .HasColumnType("integer"); - - b.Property("Rank") - .HasColumnType("integer"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("LinkedAlbumId"); - - b.HasIndex("LinkedArtistId"); - - b.HasIndex("ChartId", "LinkedAlbumId"); - - b.HasIndex("ChartId", "Rank") - .IsUnique(); - - b.ToTable("ChartItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("ContributorName") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("ContributorType") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MetaTagIdentifier") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SubRole") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("ArtistId", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.HasIndex("ContributorName", "MetaTagIdentifier", "SongId") - .IsUnique(); - - b.ToTable("Contributors"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Client") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Device") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("TokenHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("TokenPrefixHash") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("character varying(8)"); - - b.Property("TokenSalt") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("Version") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("TokenHash") - .IsUnique(); - - b.HasIndex("TokenPrefixHash"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "ExpiresAt", "RevokedAt"); - - b.ToTable("JellyfinAccessTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JobHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CompletedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ErrorMessage") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("StartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Success") - .HasColumnType("boolean"); - - b.Property("WasManualTrigger") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("StartedAt"); - - b.HasIndex("JobName", "StartedAt"); - - b.ToTable("JobHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumCount") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistCount") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastScanAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SongCount") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Type") - .IsUnique() - .HasFilter("\"Type\" != 3"); - - b.ToTable("Libraries"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Files in this directory are scanned and Album information is gathered via processing.", - IsLocked = false, - Name = "Inbound", - Path = "/app/inbound/", - SortOrder = 0, - Type = 1 - }, - new - { - Id = 2, - ApiKey = new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The staging directory to place processed files into (Inbound -> Staging -> Library).", - IsLocked = false, - Name = "Staging", - Path = "/app/staging/", - SortOrder = 0, - Type = 2 - }, - new - { - Id = 3, - ApiKey = new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The library directory to place processed, reviewed and ready to use music files into.", - IsLocked = false, - Name = "Storage", - Path = "/app/storage/", - SortOrder = 0, - Type = 3 - }, - new - { - Id = 4, - ApiKey = new Guid("277e8907-d170-780d-816d-92111e007606"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where user images are stored.", - IsLocked = false, - Name = "User Images", - Path = "/app/user-images/", - SortOrder = 0, - Type = 4 - }, - new - { - Id = 5, - ApiKey = new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where playlist data is stored.", - IsLocked = false, - Name = "Playlist Data", - Path = "/app/playlists/", - SortOrder = 0, - Type = 5 - }, - new - { - Id = 6, - ApiKey = new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where templates are stored, organized by language code.", - IsLocked = false, - Name = "Templates", - Path = "/app/templates/", - SortOrder = 0, - Type = 7 - }, - new - { - Id = 7, - ApiKey = new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where podcast media files are stored.", - IsLocked = false, - Name = "Podcasts", - Path = "/app/podcasts/", - SortOrder = 0, - Type = 8 - }, - new - { - Id = 8, - ApiKey = new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Library where custom theme packs are stored.", - IsLocked = false, - Name = "Themes", - Path = "/app/themes/", - SortOrder = 0, - Type = 9 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryAccessControl", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserGroupId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LibraryId"); - - b.HasIndex("UserGroupId"); - - b.HasIndex("LibraryId", "UserGroupId") - .IsUnique(); - - b.ToTable("LibraryAccessControls"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DurationInMs") - .HasColumnType("double precision"); - - b.Property("ForAlbumId") - .HasColumnType("integer"); - - b.Property("ForArtistId") - .HasColumnType("integer"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("LibraryId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CreatedAt"); - - b.HasIndex("ForAlbumId"); - - b.HasIndex("ForArtistId"); - - b.HasIndex("LibraryId"); - - b.HasIndex("LibraryId", "CreatedAt"); - - b.ToTable("LibraryScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PayloadJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PartySessionId"); - - b.HasIndex("UserId"); - - b.ToTable("PartyAuditEvents"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CurrentQueueItemApiKey") - .HasColumnType("uuid"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("double precision"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.Property("Volume") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CurrentQueueItemApiKey"); - - b.HasIndex("IsPlaying"); - - b.HasIndex("LastHeartbeatAt"); - - b.HasIndex("PartySessionId") - .IsUnique(); - - b.HasIndex("UpdatedByUserId"); - - b.ToTable("PartyPlaybackStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EnqueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("EnqueuedByUserId") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Note") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Source") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("EnqueuedAt"); - - b.HasIndex("EnqueuedByUserId"); - - b.HasIndex("PartySessionId"); - - b.HasIndex("SongApiKey"); - - b.HasIndex("SortOrder"); - - b.HasIndex("PartySessionId", "SortOrder"); - - b.ToTable("PartyQueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ActiveEndpointId") - .HasColumnType("uuid"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsEndpointOffline") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsQueueLocked") - .HasColumnType("boolean"); - - b.Property("JoinCodeHash") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("PlaybackRevision") - .HasColumnType("bigint"); - - b.Property("QueueRevision") - .HasColumnType("bigint"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ActiveEndpointId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Status"); - - b.ToTable("PartySessions"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CapabilitiesJson") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsShared") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OwnerUserId") - .HasColumnType("integer"); - - b.Property("Room") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsShared"); - - b.HasIndex("LastSeenAt"); - - b.HasIndex("OwnerUserId"); - - b.HasIndex("Room"); - - b.HasIndex("Type"); - - b.ToTable("PartySessionEndpoints"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.Property("PartySessionId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("IsBanned") - .HasColumnType("boolean"); - - b.Property("JoinedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Role") - .HasColumnType("integer"); - - b.HasKey("PartySessionId", "UserId"); - - b.HasIndex("IsBanned"); - - b.HasIndex("Role"); - - b.HasIndex("UserId"); - - b.HasIndex("PartySessionId", "UserId") - .IsUnique(); - - b.ToTable("PartySessionParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ChangedBy") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsCurrentSong") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayQueId") - .HasColumnType("integer"); - - b.Property("Position") - .HasColumnType("double precision"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.ToTable("PlayQues"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Hostname") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitRate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ScrobbleEnabled") - .HasColumnType("boolean"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TranscodingId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserAgent") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Client", "UserAgent"); - - b.ToTable("Players"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AllowedUserIds") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SongCount") - .HasColumnType("smallint"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("Playlists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("PlaylistId") - .HasColumnType("integer"); - - b.Property("PlaylistOrder") - .HasColumnType("integer"); - - b.Property("SongApiKey") - .HasColumnType("uuid"); - - b.HasKey("SongId", "PlaylistId"); - - b.HasIndex("PlaylistId"); - - b.HasIndex("SongId", "PlaylistId") - .IsUnique(); - - b.ToTable("PlaylistSong"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AutoDownloadEnabled") - .HasColumnType("boolean"); - - b.Property("ConsecutiveFailureCount") - .HasColumnType("integer"); - - b.Property("CoverArtLocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Etag") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("FeedUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ImageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsDeleted") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastModified") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncAttemptAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSyncError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxDownloadedEpisodes") - .HasColumnType("integer"); - - b.Property("MaxStorageBytes") - .HasColumnType("bigint"); - - b.Property("NextSyncAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("RefreshIntervalHours") - .HasColumnType("integer"); - - b.Property("SiteUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsDeleted"); - - b.HasIndex("NextSyncAt"); - - b.HasIndex("UserId", "FeedUrl") - .IsUnique(); - - b.ToTable("PodcastChannels"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DownloadError") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("DownloadStatus") - .HasColumnType("integer"); - - b.Property("Duration") - .HasColumnType("interval"); - - b.Property("EnclosureLength") - .HasColumnType("bigint"); - - b.Property("EnclosureUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EpisodeKey") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Guid") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LocalFileSize") - .HasColumnType("bigint"); - - b.Property("LocalPath") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PodcastChannelId") - .HasColumnType("integer"); - - b.Property("PublishDate") - .HasColumnType("timestamp with time zone"); - - b.Property("QueuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "DownloadStatus"); - - b.HasIndex("PodcastChannelId", "EpisodeKey") - .IsUnique(); - - b.HasIndex("PodcastChannelId", "PublishDate"); - - b.ToTable("PodcastEpisodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("PositionSeconds") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId"); - - b.HasIndex("UserId", "PodcastEpisodeId") - .IsUnique(); - - b.ToTable("PodcastEpisodeBookmarks"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RadioStation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("HomePageUrl") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StreamUrl") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.ToTable("RadioStations"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DeviceId") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("HashedToken") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IssuedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplacedByToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("RevokedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("RevokedReason") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SessionStartedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TokenFamily") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ExpiresAt"); - - b.HasIndex("HashedToken") - .IsUnique(); - - b.HasIndex("TokenFamily"); - - b.HasIndex("UserId"); - - b.ToTable("RefreshTokens"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("AlbumTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ArtistNameNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DescriptionNormalized") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExternalUrl") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastActivityType") - .HasColumnType("integer"); - - b.Property("LastActivityUserId") - .HasColumnType("integer"); - - b.Property("Notes") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ReleaseYear") - .HasColumnType("integer"); - - b.Property("SongTitle") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SongTitleNormalized") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("TargetAlbumApiKey") - .HasColumnType("uuid"); - - b.Property("TargetArtistApiKey") - .HasColumnType("uuid"); - - b.Property("TargetSongApiKey") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedByUserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("LastActivityUserId"); - - b.HasIndex("UpdatedByUserId"); - - b.HasIndex("CreatedAt", "Id") - .IsDescending(); - - b.HasIndex("LastActivityAt", "Id") - .IsDescending(); - - b.HasIndex("CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetAlbumApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("TargetArtistApiKey", "CreatedAt", "Id") - .IsDescending(false, true, true); - - b.HasIndex("Status", "CreatedByUserId", "CreatedAt", "Id") - .IsDescending(false, false, true, true); - - b.ToTable("Requests"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Body") - .IsRequired() - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedByUserId") - .HasColumnType("integer"); - - b.Property("IsSystem") - .HasColumnType("boolean"); - - b.Property("ParentCommentId") - .HasColumnType("integer"); - - b.Property("RequestId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("CreatedByUserId"); - - b.HasIndex("ParentCommentId"); - - b.HasIndex("RequestId", "CreatedAt", "Id"); - - b.HasIndex("RequestId", "ParentCommentId", "CreatedAt", "Id"); - - b.ToTable("RequestComments"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsCommenter") - .HasColumnType("boolean"); - - b.Property("IsCreator") - .HasColumnType("boolean"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "RequestId"); - - b.ToTable("RequestParticipants"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.Property("RequestId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastSeenAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("RequestId", "UserId"); - - b.HasIndex("UserId", "LastSeenAt"); - - b.ToTable("RequestUserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SearchHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("ByUserId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("FoundAlbumsCount") - .HasColumnType("integer"); - - b.Property("FoundArtistsCount") - .HasColumnType("integer"); - - b.Property("FoundOtherItems") - .HasColumnType("integer"); - - b.Property("FoundSongsCount") - .HasColumnType("integer"); - - b.Property("SearchDurationInMs") - .HasColumnType("double precision"); - - b.Property("SearchQuery") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.HasKey("Id"); - - b.ToTable("SearchHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("Category") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Category"); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Settings"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), - Comment = "Add a default filter to show only albums with this or less number of songs.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 2, - ApiKey = new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), - Comment = "Add a default filter to show only albums with this or less duration.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "filtering.lessThanDuration", - SortOrder = 0, - Value = "720000" - }, - new - { - Id = 4, - ApiKey = new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), - Comment = "Default page size when view including pagination.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.pagesize", - SortOrder = 0, - Value = "100" - }, - new - { - Id = 6, - ApiKey = new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), - Comment = "Amount of time to display a Toast then auto-close (in milliseconds.)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userinterface.toastAutoCloseTime", - SortOrder = 0, - Value = "2000" - }, - new - { - Id = 300, - ApiKey = new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), - Category = 3, - Comment = "Short Format to use when displaying full dates.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayFormatShort", - SortOrder = 0, - Value = "yyyyMMdd HH\\:mm" - }, - new - { - Id = 301, - ApiKey = new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), - Category = 3, - Comment = "Format to use when displaying activity related dates (e.g., processing messages)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "formatting.dateTimeDisplayActivityFormat", - SortOrder = 0, - Value = "hh\\:mm\\:ss\\.ffff" - }, - new - { - Id = 9, - ApiKey = new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), - Comment = "List of ignored articles when scanning media (pipe delimited).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredArticles", - SortOrder = 0, - Value = "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" - }, - new - { - Id = 500, - ApiKey = new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), - Category = 5, - Comment = "Is Magic processing enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 501, - ApiKey = new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), - Category = 5, - Comment = "Renumber songs when doing magic processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRenumberSongs", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 502, - ApiKey = new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), - Category = 5, - Comment = "Remove featured artists from song artist when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongArtist", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 503, - ApiKey = new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), - Category = 5, - Comment = "Remove featured artists from song title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveFeaturingArtistFromSongTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 504, - ApiKey = new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), - Category = 5, - Comment = "Replace song artist separators with standard ID3 separator ('/') when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doReplaceSongsArtistSeparators", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 505, - ApiKey = new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), - Category = 5, - Comment = "Set the song year to current year if invalid or missing when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doSetYearToCurrentIfInvalid", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 506, - ApiKey = new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), - Category = 5, - Comment = "Remove unwanted text from album title when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromAlbumTitle", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 507, - ApiKey = new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), - Category = 5, - Comment = "Remove unwanted text from song titles when doing magic.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "magic.doRemoveUnwantedTextFromSongTitles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 200, - ApiKey = new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), - Category = 2, - Comment = "Enable Melodee to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 201, - ApiKey = new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), - Category = 2, - Comment = "Bitrate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.bitrate", - SortOrder = 0, - Value = "384" - }, - new - { - Id = 202, - ApiKey = new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), - Category = 2, - Comment = "Vbr to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.vbrLevel", - SortOrder = 0, - Value = "4" - }, - new - { - Id = 203, - ApiKey = new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), - Category = 2, - Comment = "Sampling rate to convert non-mp3 media files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "conversion.samplingRate", - SortOrder = 0, - Value = "48000" - }, - new - { - Id = 700, - ApiKey = new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), - Category = 7, - Comment = "Process of CueSheet files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.cueSheet.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 701, - ApiKey = new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), - Category = 7, - Comment = "Process of M3U files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.m3u.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 702, - ApiKey = new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), - Category = 7, - Comment = "Process of NFO files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.nfo.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 703, - ApiKey = new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), - Category = 7, - Comment = "Process of Simple File Verification (SFV) files during processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "plugin.simpleFileVerification.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 704, - ApiKey = new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), - Category = 7, - Comment = "If true then all comments will be removed from media files.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteComments", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 26, - ApiKey = new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), - Comment = "Fragments of artist names to replace (JSON Dictionary).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.artistNameReplacements", - SortOrder = 0, - Value = "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" - }, - new - { - Id = 27, - ApiKey = new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), - Comment = "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 28, - ApiKey = new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), - Comment = "Delete original files when processing. When false a copy if made, else original is deleted after processed.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doDeleteOriginal", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 29, - ApiKey = new Guid("4f830df7-7942-6353-1d84-946f271c084e"), - Comment = "Extension to add to file when converted, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.convertedExtension", - SortOrder = 0, - Value = "_converted" - }, - new - { - Id = 30, - ApiKey = new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), - Comment = "Extension to add to file when processed, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.processedExtension", - SortOrder = 0, - Value = "_processed" - }, - new - { - Id = 32, - ApiKey = new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), - Comment = "When processing over write any existing Melodee data files, otherwise skip and leave in place.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doOverrideExistingMelodeeDataFiles", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 34, - ApiKey = new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), - Comment = "The maximum number of files to process, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumProcessingCount", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 35, - ApiKey = new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), - Comment = "Maximum allowed length of album directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumAlbumDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 36, - ApiKey = new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), - Comment = "Maximum allowed length of artist directory name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.maximumArtistDirectoryNameLength", - SortOrder = 0, - Value = "255" - }, - new - { - Id = 37, - ApiKey = new Guid("a4f7e266-d355-e402-865f-da369963cc03"), - Comment = "Fragments to remove from album titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.albumTitleRemovals", - SortOrder = 0, - Value = "['^', '~', '#']" - }, - new - { - Id = 38, - ApiKey = new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), - Comment = "Fragments to remove from song titles (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.songTitleRemovals", - SortOrder = 0, - Value = "[';', '(Remaster)', 'Remaster']" - }, - new - { - Id = 39, - ApiKey = new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), - Comment = "Continue processing if an error is encountered.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.doContinueOnDirectoryProcessingErrors", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 41, - ApiKey = new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), - Comment = "Is scripting enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 42, - ApiKey = new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), - Comment = "Script to run before processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.preDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 43, - ApiKey = new Guid("e999453e-9193-fbfe-a533-ab541773943e"), - Comment = "Script to run after processing the inbound directory, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scripting.postDiscoveryScript", - SortOrder = 0, - Value = "" - }, - new - { - Id = 45, - ApiKey = new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), - Comment = "Don't create performer contributors for these performer names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPerformers", - SortOrder = 0, - Value = "" - }, - new - { - Id = 46, - ApiKey = new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), - Comment = "Don't create production contributors for these production names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredProduction", - SortOrder = 0, - Value = "['www.t.me;pmedia_music']" - }, - new - { - Id = 47, - ApiKey = new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), - Comment = "Don't create publisher contributors for these artist names.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.ignoredPublishers", - SortOrder = 0, - Value = "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" - }, - new - { - Id = 49, - ApiKey = new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), - Comment = "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "encryption.privateKey", - SortOrder = 0, - Value = "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" - }, - new - { - Id = 50, - ApiKey = new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), - Comment = "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.duplicateAlbumPrefix", - SortOrder = 0, - Value = "_duplicate_ " - }, - new - { - Id = 1300, - ApiKey = new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), - Category = 13, - Comment = "The maximum value a song number can have for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumSongNumber", - SortOrder = 0, - Value = "9999" - }, - new - { - Id = 1301, - ApiKey = new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), - Category = 13, - Comment = "Minimum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumYear", - SortOrder = 0, - Value = "1860" - }, - new - { - Id = 1302, - ApiKey = new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), - Category = 13, - Comment = "Maximum allowed year for an album.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.maximumAlbumYear", - SortOrder = 0, - Value = "2150" - }, - new - { - Id = 1303, - ApiKey = new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), - Category = 13, - Comment = "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumSongCount", - SortOrder = 0, - Value = "3" - }, - new - { - Id = 1304, - ApiKey = new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), - Category = 13, - Comment = "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "validation.minimumAlbumDuration", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 100, - ApiKey = new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), - Category = 1, - Comment = "OpenSubsonic server supported Subsonic API version.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonic.serverSupportedVersion", - SortOrder = 0, - Value = "1.16.1" - }, - new - { - Id = 101, - ApiKey = new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), - Category = 1, - Comment = "OpenSubsonic server name.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.type", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 103, - ApiKey = new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), - Category = 1, - Comment = "OpenSubsonic email to use in License responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServerLicenseEmail", - SortOrder = 0, - Value = "noreply@localhost.lan" - }, - new - { - Id = 104, - ApiKey = new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), - Category = 1, - Comment = "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "openSubsonicServer.openSubsonicServer.index.artistLimit", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 53, - ApiKey = new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), - Comment = "Processing batching size. Allowed range is between [250] and [1000]. ", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "defaults.batchSize", - SortOrder = 0, - Value = "250" - }, - new - { - Id = 54, - ApiKey = new Guid("7464b039-de31-f876-5731-46ce62500117"), - Comment = "When processing folders immediately delete any files with these extensions. (JSON array).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "processing.fileExtensionsToDelete", - SortOrder = 0, - Value = "['log', 'lnk', 'lrc', 'doc']" - }, - new - { - Id = 902, - ApiKey = new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), - Category = 9, - Comment = "User agent to send with Search engine requests.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.userAgent", - SortOrder = 0, - Value = "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" - }, - new - { - Id = 903, - ApiKey = new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), - Category = 9, - Comment = "Default page size when performing a search engine search.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.defaultPageSize", - SortOrder = 0, - Value = "20" - }, - new - { - Id = 904, - ApiKey = new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), - Category = 9, - Comment = "Is MusicBrainz search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 905, - ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), - Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.storagePath", - SortOrder = 0, - Value = "/melodee_test/search-engine-storage/musicbrainz/" - }, - new - { - Id = 906, - ApiKey = new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), - Category = 9, - Comment = "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importMaximumToProcess", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 907, - ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), - Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importBatchSize", - SortOrder = 0, - Value = "50000" - }, - new - { - Id = 908, - ApiKey = new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), - Category = 9, - Comment = "Timestamp of when last MusicBrainz import was successful.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.musicbrainz.importLastImportTimestamp", - SortOrder = 0, - Value = "" - }, - new - { - Id = 910, - ApiKey = new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), - Category = 9, - Comment = "Is Spotify search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 911, - ApiKey = new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), - Category = 9, - Comment = "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 912, - ApiKey = new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), - Category = 9, - Comment = "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 913, - ApiKey = new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), - Category = 9, - Comment = "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.spotify.accessToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 914, - ApiKey = new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), - Category = 9, - Comment = "Is ITunes search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.itunes.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 915, - ApiKey = new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), - Category = 9, - Comment = "Is LastFM search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.lastFm.Enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 916, - ApiKey = new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), - Category = 9, - Comment = "When performing a search engine search, the maximum allowed page size.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.maximumAllowedPageSize", - SortOrder = 0, - Value = "1000" - }, - new - { - Id = 917, - ApiKey = new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), - Category = 9, - Comment = "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.artistSearchDatabaseRefreshInDays", - SortOrder = 0, - Value = "14" - }, - new - { - Id = 918, - ApiKey = new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), - Category = 9, - Comment = "Is Deezer search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.deezer.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 919, - ApiKey = new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), - Category = 9, - Comment = "Is Metal API search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.metalApi.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 400, - ApiKey = new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), - Category = 4, - Comment = "Include any embedded images from media files into the Melodee data file.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.doLoadEmbeddedImages", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 401, - ApiKey = new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), - Category = 4, - Comment = "Small image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.smallSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 402, - ApiKey = new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), - Category = 4, - Comment = "Medium image size (square image, this is both width and height).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.mediumSize", - SortOrder = 0, - Value = "600" - }, - new - { - Id = 403, - ApiKey = new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), - Category = 4, - Comment = "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.largeSize", - SortOrder = 0, - Value = "1600" - }, - new - { - Id = 404, - ApiKey = new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), - Category = 4, - Comment = "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfAlbumImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 405, - ApiKey = new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), - Category = 4, - Comment = "Maximum allowed number of images for an artist, set to zero for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.maximumNumberOfArtistImages", - SortOrder = 0, - Value = "25" - }, - new - { - Id = 406, - ApiKey = new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), - Category = 4, - Comment = "Images under this size are considered invalid, set to zero to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "imaging.minimumImageSize", - SortOrder = 0, - Value = "300" - }, - new - { - Id = 1200, - ApiKey = new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), - Category = 12, - Comment = "Default format for transcoding.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.default", - SortOrder = 0, - Value = "raw" - }, - new - { - Id = 1201, - ApiKey = new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), - Category = 12, - Comment = "Default command to transcode MP3 for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.mp3", - SortOrder = 0, - Value = "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" - }, - new - { - Id = 1202, - ApiKey = new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), - Category = 12, - Comment = "Default command to transcode using libopus for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.opus", - SortOrder = 0, - Value = "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" - }, - new - { - Id = 1203, - ApiKey = new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), - Category = 12, - Comment = "Default command to transcode to aac for streaming.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "transcoding.command.aac", - SortOrder = 0, - Value = "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" - }, - new - { - Id = 1000, - ApiKey = new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), - Category = 10, - Comment = "Is scrobbling enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1001, - ApiKey = new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), - Category = 10, - Comment = "Is scrobbling to Last.fm enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.Enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1002, - ApiKey = new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), - Category = 10, - Comment = "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.apiKey", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1003, - ApiKey = new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), - Category = 10, - Comment = "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "scrobbling.lastFm.sharedSecret", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1100, - ApiKey = new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), - Category = 11, - Comment = "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.baseUrl", - SortOrder = 0, - Value = "** REQUIRED: THIS MUST BE EDITED **" - }, - new - { - Id = 1103, - ApiKey = new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), - Category = 11, - Comment = "Name for this Melodee instance (used in emails and UI branding).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", - IsLocked = false, - Key = "system.siteName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1101, - ApiKey = new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), - Category = 11, - Comment = "Is downloading enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.isDownloadingEnabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1102, - ApiKey = new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), - Category = 11, - Comment = "Maximum upload size in bytes for UI uploads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "system.maxUploadSize", - SortOrder = 0, - Value = "5242880" - }, - new - { - Id = 1400, - ApiKey = new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), - Category = 14, - Comment = "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0/1 1/1 * ? *" - }, - new - { - Id = 1401, - ApiKey = new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), - Category = 14, - Comment = "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryProcess.cronExpression", - SortOrder = 0, - Value = "0 */10 * ? * *" - }, - new - { - Id = 1402, - ApiKey = new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), - Category = 14, - Comment = "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.libraryInsert.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1403, - ApiKey = new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), - Category = 14, - Comment = "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.musicbrainzUpdateDatabase.cronExpression", - SortOrder = 0, - Value = "0 0 12 1 * ?" - }, - new - { - Id = 1404, - ApiKey = new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), - Category = 14, - Comment = "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.artistSearchEngineHousekeeping.cronExpression", - SortOrder = 0, - Value = "0 0 0 * * ?" - }, - new - { - Id = 1405, - ApiKey = new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), - Category = 14, - Comment = "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.chartUpdate.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1406, - ApiKey = new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), - Category = 14, - Comment = "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.stagingAutoMove.cronExpression", - SortOrder = 0, - Value = "0 */15 * * * ?" - }, - new - { - Id = 1500, - ApiKey = new Guid("77c527bc-5317-46da-d778-e7114791749f"), - Comment = "Enable or disable email sending functionality", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When true, enables SMTP email sending for password resets and notifications", - IsLocked = false, - Key = "email.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1501, - ApiKey = new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), - Comment = "Display name in From field of outgoing emails", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "email.fromName", - SortOrder = 0, - Value = "Melodee" - }, - new - { - Id = 1502, - ApiKey = new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), - Comment = "Email address in From field (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: noreply@yourdomain.com", - IsLocked = false, - Key = "email.fromEmail", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1503, - ApiKey = new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), - Comment = "SMTP server hostname (REQUIRED for email sending)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Example: smtp.gmail.com or smtp.sendgrid.net", - IsLocked = false, - Key = "email.smtpHost", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1504, - ApiKey = new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), - Comment = "SMTP server port", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", - IsLocked = false, - Key = "email.smtpPort", - SortOrder = 0, - Value = "587" - }, - new - { - Id = 1505, - ApiKey = new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), - Comment = "SMTP authentication username (optional)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Leave empty if SMTP server does not require authentication", - IsLocked = false, - Key = "email.smtpUsername", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1506, - ApiKey = new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), - Comment = "SMTP authentication password (optional, use env var email_smtpPassword)", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "For security, set via environment variable: email_smtpPassword", - IsLocked = false, - Key = "email.smtpPassword", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1507, - ApiKey = new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), - Comment = "Use SSL connection for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Set to true for port 465 (SSL), false for port 587 (StartTLS)", - IsLocked = false, - Key = "email.smtpUseSsl", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1508, - ApiKey = new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), - Comment = "Use StartTLS for SMTP", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Recommended: true for port 587", - IsLocked = false, - Key = "email.smtpUseStartTls", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1509, - ApiKey = new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), - Comment = "Password reset email subject line", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Subject for password reset emails", - IsLocked = false, - Key = "email.resetPassword.subject", - SortOrder = 0, - Value = "Reset your Melodee password" - }, - new - { - Id = 1600, - ApiKey = new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), - Comment = "Password reset token expiry time in minutes", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long password reset links remain valid (default: 60 minutes)", - IsLocked = false, - Key = "security.passwordResetTokenExpiryMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1700, - ApiKey = new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), - Comment = "Enable Jellyfin API compatibility", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", - IsLocked = false, - Key = "jellyfin.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1701, - ApiKey = new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), - Comment = "Internal route prefix for Jellyfin API", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", - IsLocked = false, - Key = "jellyfin.routePrefix", - SortOrder = 0, - Value = "/api/jf" - }, - new - { - Id = 1702, - ApiKey = new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), - Comment = "Jellyfin token expiry time in hours", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", - IsLocked = false, - Key = "jellyfin.token.expiresAfterHours", - SortOrder = 0, - Value = "168" - }, - new - { - Id = 1703, - ApiKey = new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), - Comment = "Maximum active Jellyfin tokens per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "The maximum number of active Jellyfin tokens allowed per user (default: 10)", - IsLocked = false, - Key = "jellyfin.token.maxActivePerUser", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1704, - ApiKey = new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), - Comment = "Allow legacy Emby/MediaBrowser headers", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", - IsLocked = false, - Key = "jellyfin.token.allowLegacyHeaders", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1705, - ApiKey = new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), - Comment = "Secret pepper for Jellyfin token hashing", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Server-side secret used in token hash computation. Change this value in production for added security.", - IsLocked = false, - Key = "jellyfin.token.pepper", - SortOrder = 0, - Value = "ChangeThisPepperInProduction" - }, - new - { - Id = 1706, - ApiKey = new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), - Comment = "API requests allowed per period", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiRequestsPerPeriod", - SortOrder = 0, - Value = "200" - }, - new - { - Id = 1707, - ApiKey = new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), - Comment = "Rate limit period in seconds", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Duration of the rate limit period in seconds (default: 60)", - IsLocked = false, - Key = "jellyfin.rateLimit.apiPeriodSeconds", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1708, - ApiKey = new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), - Comment = "Concurrent streams per user", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Maximum number of concurrent audio streams allowed per user (default: 2)", - IsLocked = false, - Key = "jellyfin.rateLimit.streamConcurrentPerUser", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1709, - ApiKey = new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), - Category = 9, - Comment = "Is Discogs search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1710, - ApiKey = new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), - Category = 9, - Comment = "Discogs API user token for authentication.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.discogs.userToken", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1711, - ApiKey = new Guid("21837867-a824-2a66-fa7c-3583974874e4"), - Category = 9, - Comment = "Is WikiData search engine enabled.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "searchEngine.wikidata.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1800, - ApiKey = new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), - Category = 15, - Comment = "Enable podcast support.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.enabled", - SortOrder = 0, - Value = "true" - }, - new - { - Id = 1801, - ApiKey = new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), - Category = 15, - Comment = "Allow HTTP (non-secure) URLs for podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.allowHttp", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1802, - ApiKey = new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), - Category = 15, - Comment = "Timeout in seconds for HTTP requests to podcast feeds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.timeoutSeconds", - SortOrder = 0, - Value = "30" - }, - new - { - Id = 1803, - ApiKey = new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), - Category = 15, - Comment = "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxRedirects", - SortOrder = 0, - Value = "10" - }, - new - { - Id = 1804, - ApiKey = new Guid("13168117-a286-23b5-5858-9f91485c6432"), - Category = 15, - Comment = "Maximum size in bytes for podcast feed responses.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.http.maxFeedBytes", - SortOrder = 0, - Value = "10485760" - }, - new - { - Id = 1805, - ApiKey = new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), - Category = 15, - Comment = "Maximum number of episodes to store per podcast channel.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.refresh.maxItemsPerChannel", - SortOrder = 0, - Value = "500" - }, - new - { - Id = 1806, - ApiKey = new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads (global).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.global", - SortOrder = 0, - Value = "2" - }, - new - { - Id = 1807, - ApiKey = new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), - Category = 15, - Comment = "Maximum concurrent podcast episode downloads per user.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxConcurrent.perUser", - SortOrder = 0, - Value = "1" - }, - new - { - Id = 1808, - ApiKey = new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), - Category = 15, - Comment = "Maximum size in bytes for podcast episode downloads.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.download.maxEnclosureBytes", - SortOrder = 0, - Value = "2147483648" - }, - new - { - Id = 1850, - ApiKey = new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), - Category = 14, - Comment = "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRefresh.cronExpression", - SortOrder = 0, - Value = "0 */15 * ? * *" - }, - new - { - Id = 1851, - ApiKey = new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), - Category = 14, - Comment = "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastDownload.cronExpression", - SortOrder = 0, - Value = "0 */5 * ? * *" - }, - new - { - Id = 1809, - ApiKey = new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), - Category = 15, - Comment = "Number of days to keep downloaded episodes. 0 to disable retention.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.downloadedEpisodesInDays", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1810, - ApiKey = new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), - Category = 15, - Comment = "Threshold in minutes to consider a downloading episode as stuck.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.stuckDownloadThresholdMinutes", - SortOrder = 0, - Value = "60" - }, - new - { - Id = 1811, - ApiKey = new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), - Category = 15, - Comment = "Threshold in hours to consider a temporary file orphaned.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.recovery.orphanedUsageThresholdHours", - SortOrder = 0, - Value = "12" - }, - new - { - Id = 1852, - ApiKey = new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), - Category = 14, - Comment = "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastCleanup.cronExpression", - SortOrder = 0, - Value = "0 0 2 * * ?" - }, - new - { - Id = 1853, - ApiKey = new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), - Category = 14, - Comment = "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jobs.podcastRecovery.cronExpression", - SortOrder = 0, - Value = "0 */30 * ? * *" - }, - new - { - Id = 1812, - ApiKey = new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), - Category = 15, - Comment = "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.quota.maxBytesPerUser", - SortOrder = 0, - Value = "5368709120" - }, - new - { - Id = 1813, - ApiKey = new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), - Category = 15, - Comment = "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepLastNEpisodes", - SortOrder = 0, - Value = "0" - }, - new - { - Id = 1814, - ApiKey = new Guid("3da9402e-9566-c883-66e5-d232de677199"), - Category = 15, - Comment = "Delete downloaded episodes after they have been played. false to disable.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "podcast.retention.keepUnplayedOnly", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1900, - ApiKey = new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), - Category = 16, - Comment = "Enable Jukebox support for server-side playback.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.enabled", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1901, - ApiKey = new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), - Category = 16, - Comment = "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "jukebox.backendType", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1910, - ApiKey = new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), - Category = 16, - Comment = "Path to the MPV executable. Leave empty to use system PATH.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.path", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1911, - ApiKey = new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), - Category = 16, - Comment = "Audio device to use for MPV playback. Leave empty for default device.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.audioDevice", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1912, - ApiKey = new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), - Category = 16, - Comment = "Extra command-line arguments to pass to MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.extraArgs", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1913, - ApiKey = new Guid("45dfa023-d926-4364-33d1-245a9623dece"), - Category = 16, - Comment = "Path for the MPV IPC socket. Leave empty for auto temp directory.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.socketPath", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1914, - ApiKey = new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), - Category = 16, - Comment = "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1915, - ApiKey = new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), - Category = 16, - Comment = "Enable verbose debug output for MPV.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpv.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1920, - ApiKey = new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), - Category = 16, - Comment = "Unique name/identifier for this MPD instance (for multi-instance support).", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.instanceName", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1921, - ApiKey = new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), - Category = 16, - Comment = "Hostname or IP address of the MPD server.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.host", - SortOrder = 0, - Value = "localhost" - }, - new - { - Id = 1922, - ApiKey = new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), - Category = 16, - Comment = "Port number for MPD connection.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.port", - SortOrder = 0, - Value = "6600" - }, - new - { - Id = 1923, - ApiKey = new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), - Category = 16, - Comment = "Password for MPD authentication. Leave empty if no password.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.password", - SortOrder = 0, - Value = "" - }, - new - { - Id = 1924, - ApiKey = new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), - Category = 16, - Comment = "Timeout for MPD TCP connection and operations in milliseconds.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.timeoutMs", - SortOrder = 0, - Value = "10000" - }, - new - { - Id = 1925, - ApiKey = new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), - Category = 16, - Comment = "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.initialVolume", - SortOrder = 0, - Value = "0.8" - }, - new - { - Id = 1926, - ApiKey = new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), - Category = 16, - Comment = "Enable debug logging for MPD commands.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "mpd.enableDebugOutput", - SortOrder = 0, - Value = "false" - }, - new - { - Id = 1927, - ApiKey = new Guid("df8f5291-a7c1-797c-1dea-5d302116b2c9"), - Category = 11, - Comment = "Enable per-user and per-device transcoding profiles.", - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - IsLocked = false, - Key = "userDeviceProfile.enabled", - SortOrder = 0, - Value = "true" - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("ExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IsDownloadable") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastVisitedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("ShareType") - .HasColumnType("integer"); - - b.Property("ShareUniqueId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VisitCount") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.ToTable("Shares"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ShareActivity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("ShareId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("ShareActivities"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsPublic") - .HasColumnType("boolean"); - - b.Property("LastEvaluatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastResultCount") - .HasColumnType("integer"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MqlQuery") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NormalizedQuery") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("IsPublic"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("SmartPlaylists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("AlternateNames") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("AmgId") - .HasColumnType("text"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BPM") - .HasColumnType("integer"); - - b.Property("BitDepth") - .HasColumnType("integer"); - - b.Property("BitRate") - .HasColumnType("integer"); - - b.Property("CalculatedRating") - .HasColumnType("numeric"); - - b.Property("ChannelCount") - .HasColumnType("integer"); - - b.Property("Comment") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ContentType") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DeezerId") - .HasColumnType("integer"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DiscogsId") - .HasColumnType("text"); - - b.Property("Duration") - .HasColumnType("double precision"); - - b.Property("FileHash") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.PrimitiveCollection("Genres") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("ImageCount") - .HasColumnType("integer"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsVbr") - .HasColumnType("boolean"); - - b.Property("ItunesId") - .HasColumnType("text"); - - b.Property("LastFmId") - .HasColumnType("text"); - - b.Property("LastMetaDataUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Lyrics") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.PrimitiveCollection("Moods") - .HasMaxLength(2000) - .HasColumnType("text[]"); - - b.Property("MusicBrainzId") - .HasColumnType("uuid"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PartTitles") - .HasMaxLength(1000) - .HasColumnType("character varying(1000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("ReplayGain") - .HasColumnType("double precision"); - - b.Property("ReplayPeak") - .HasColumnType("double precision"); - - b.Property("SamplingRate") - .HasColumnType("integer"); - - b.Property("SongNumber") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("SpotifyId") - .HasColumnType("text"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("TitleSort") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("WikiDataId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("MusicBrainzId") - .IsUnique(); - - b.HasIndex("SpotifyId") - .IsUnique(); - - b.HasIndex("Title"); - - b.HasIndex("AlbumId", "SongNumber") - .IsUnique(); - - b.ToTable("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("EmailConfirmedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EmailNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HasCommentRole") - .HasColumnType("boolean"); - - b.Property("HasCoverArtRole") - .HasColumnType("boolean"); - - b.Property("HasDownloadRole") - .HasColumnType("boolean"); - - b.Property("HasJukeboxRole") - .HasColumnType("boolean"); - - b.Property("HasPlaylistRole") - .HasColumnType("boolean"); - - b.Property("HasPodcastRole") - .HasColumnType("boolean"); - - b.Property("HasSettingsRole") - .HasColumnType("boolean"); - - b.Property("HasShareRole") - .HasColumnType("boolean"); - - b.Property("HasStreamRole") - .HasColumnType("boolean"); - - b.Property("HasUploadRole") - .HasColumnType("boolean"); - - b.Property("HatedGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("IsEditor") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsScrobblingEnabled") - .HasColumnType("boolean"); - - b.Property("LastActivityAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFmSessionKey") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("OpenSubsonicSecretProtected") - .HasMaxLength(2048) - .HasColumnType("character varying(2048)"); - - b.Property("PasswordEncrypted") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHash") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("PasswordHashAlgorithm") - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("PasswordResetToken") - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("PasswordResetTokenExpiresAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PreferredLanguage") - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("PreferredTheme") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("PublicKey") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredGenres") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TimeZoneId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserNameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Email") - .IsUnique(); - - b.HasIndex("UserName") - .IsUnique(); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AlbumId") - .HasColumnType("integer"); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("AlbumId"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "AlbumId") - .IsUnique(); - - b.ToTable("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("ArtistId") - .HasColumnType("integer"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("ArtistId"); - - b.HasIndex("UserId", "ArtistId") - .IsUnique(); - - b.ToTable("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserDeviceProfile", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DirectPlay") - .HasColumnType("boolean"); - - b.Property("IsDefaultProfile") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("MaxBitrate") - .HasColumnType("integer"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayerId") - .HasColumnType("integer"); - - b.Property("Priority") - .HasColumnType("integer"); - - b.Property("ResampleRate") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("TargetCodec") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("PlayerId"); - - b.HasIndex("UserId", "IsDefaultProfile"); - - b.HasIndex("UserId", "PlayerId") - .IsUnique(); - - b.ToTable("UserDeviceProfiles"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("BandsJson") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsDefault") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("NameNormalized") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "Name") - .IsUnique(); - - b.ToTable("UserEqualizerPresets"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserGroup", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("UserGroups"); - - b.HasData( - new - { - Id = 1, - ApiKey = new Guid("5dd33e32-e1b8-a880-64a9-fdf28e2da613"), - CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), - Description = "Default group for all users", - IsLocked = false, - Name = "All Users", - SortOrder = 0 - }); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserGroupMember", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserGroupId") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserGroupId"); - - b.HasIndex("UserId"); - - b.HasIndex("UserId", "UserGroupId") - .IsUnique(); - - b.ToTable("UserGroupMembers"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PinId") - .HasColumnType("integer"); - - b.Property("PinType") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId", "PinId", "PinType") - .IsUnique(); - - b.ToTable("UserPins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("AudioQuality") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CrossfadeDuration") - .HasColumnType("double precision"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("EqualizerPreset") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("GaplessPlayback") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUsedDevice") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ReplayGain") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.Property("VolumeNormalization") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("UserPlaybackSettings"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PodcastEpisodeId") - .HasColumnType("integer"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PodcastEpisodeId", "PlayedAt"); - - b.HasIndex("UserId", "PodcastEpisodeId", "PlayedAt"); - - b.ToTable("UserPodcastEpisodePlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("DisplayName") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("HostedDomain") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("Provider") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("UserId"); - - b.HasIndex("Provider", "Subject") - .IsUnique(); - - b.ToTable("UserSocialLogins"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ApiKey") - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasMaxLength(62000) - .HasColumnType("character varying(62000)"); - - b.Property("IsHated") - .HasColumnType("boolean"); - - b.Property("IsLocked") - .HasColumnType("boolean"); - - b.Property("IsStarred") - .HasColumnType("boolean"); - - b.Property("LastPlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LastUpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("PlayedCount") - .HasColumnType("integer"); - - b.Property("Rating") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("SortOrder") - .HasColumnType("integer"); - - b.Property("StarredAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Tags") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ApiKey") - .IsUnique(); - - b.HasIndex("SongId"); - - b.HasIndex("UserId", "SongId") - .IsUnique(); - - b.ToTable("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ByUserAgent") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Client") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IpAddress") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("IsNowPlaying") - .HasColumnType("boolean"); - - b.Property("LastHeartbeatAt") - .HasColumnType("timestamp with time zone"); - - b.Property("PlayedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("SecondsPlayed") - .HasColumnType("integer"); - - b.Property("SongId") - .HasColumnType("integer"); - - b.Property("Source") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("IsNowPlaying"); - - b.HasIndex("PlayedAt"); - - b.HasIndex("SongId"); - - b.HasIndex("UserId"); - - b.HasIndex("SongId", "PlayedAt"); - - b.HasIndex("UserId", "PlayedAt"); - - b.ToTable("UserSongPlayHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Albums") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ArtistRelation", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("RelatedArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "RelatedArtist") - .WithMany() - .HasForeignKey("RelatedArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("RelatedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Bookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Bookmarks") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Bookmarks") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.ChartItem", b => - { - b.HasOne("Melodee.Common.Data.Models.Chart", "Chart") - .WithMany("Items") - .HasForeignKey("ChartId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Album", "LinkedAlbum") - .WithMany() - .HasForeignKey("LinkedAlbumId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.Artist", "LinkedArtist") - .WithMany() - .HasForeignKey("LinkedArtistId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Chart"); - - b.Navigation("LinkedAlbum"); - - b.Navigation("LinkedArtist"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Contributor", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Contributors") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("Contributors") - .HasForeignKey("ArtistId"); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("Contributors") - .HasForeignKey("SongId"); - - b.Navigation("Album"); - - b.Navigation("Artist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.JellyfinAccessToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryAccessControl", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("AccessControls") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.UserGroup", "UserGroup") - .WithMany("LibraryAccessControls") - .HasForeignKey("UserGroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - - b.Navigation("UserGroup"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.LibraryScanHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Library", "Library") - .WithMany("ScanHistories") - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Library"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyAuditEvent", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany() - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyPlaybackState", b => - { - b.HasOne("Melodee.Common.Data.Models.PartyQueueItem", "CurrentQueueItem") - .WithMany() - .HasForeignKey("CurrentQueueItemApiKey") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithOne("PlaybackState") - .HasForeignKey("Melodee.Common.Data.Models.PartyPlaybackState", "PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CurrentQueueItem"); - - b.Navigation("PartySession"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartyQueueItem", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "EnqueuedByUser") - .WithMany() - .HasForeignKey("EnqueuedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("QueueItems") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EnqueuedByUser"); - - b.Navigation("PartySession"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySessionEndpoint", "ActiveEndpoint") - .WithMany() - .HasForeignKey("ActiveEndpointId") - .HasPrincipalKey("ApiKey") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActiveEndpoint"); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionEndpoint", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "OwnerUser") - .WithMany() - .HasForeignKey("OwnerUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("OwnerUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySessionParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.PartySession", "PartySession") - .WithMany("Participants") - .HasForeignKey("PartySessionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PartySession"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlayQueue", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("PlayQues") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("PlayQues") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Player", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Players") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", null) - .WithMany("Playlists") - .HasForeignKey("SongId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Playlists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PlaylistSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Playlist", "Playlist") - .WithMany("Songs") - .HasForeignKey("PlaylistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Playlist"); - - b.Navigation("Song"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisode", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastChannel", "PodcastChannel") - .WithMany("Episodes") - .HasForeignKey("PodcastChannelId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastChannel"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastEpisodeBookmark", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RefreshToken", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("RefreshTokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "LastActivityUser") - .WithMany() - .HasForeignKey("LastActivityUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.User", "UpdatedByUser") - .WithMany() - .HasForeignKey("UpdatedByUserId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("LastActivityUser"); - - b.Navigation("UpdatedByUser"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "CreatedByUser") - .WithMany() - .HasForeignKey("CreatedByUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Melodee.Common.Data.Models.RequestComment", "ParentComment") - .WithMany("Replies") - .HasForeignKey("ParentCommentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Comments") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedByUser"); - - b.Navigation("ParentComment"); - - b.Navigation("Request"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestParticipant", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("Participants") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestUserState", b => - { - b.HasOne("Melodee.Common.Data.Models.Request", "Request") - .WithMany("UserStates") - .HasForeignKey("RequestId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Request"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Share", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Shares") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.SmartPlaylist", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("Songs") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserAlbum", b => - { - b.HasOne("Melodee.Common.Data.Models.Album", "Album") - .WithMany("UserAlbums") - .HasForeignKey("AlbumId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserAlbums") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Album"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserArtist", b => - { - b.HasOne("Melodee.Common.Data.Models.Artist", "Artist") - .WithMany("UserArtists") - .HasForeignKey("ArtistId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserArtists") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Artist"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserDeviceProfile", b => - { - b.HasOne("Melodee.Common.Data.Models.Player", "Player") - .WithMany() - .HasForeignKey("PlayerId"); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Player"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserEqualizerPreset", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserGroupMember", b => - { - b.HasOne("Melodee.Common.Data.Models.UserGroup", "UserGroup") - .WithMany("Members") - .HasForeignKey("UserGroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("GroupMemberships") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - - b.Navigation("UserGroup"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("Pins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPlaybackSettings", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserPodcastEpisodePlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.PodcastEpisode", "PodcastEpisode") - .WithMany() - .HasForeignKey("PodcastEpisodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("PodcastEpisode"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSocialLogin", b => - { - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("SocialLogins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSong", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany("UserSongs") - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany("UserSongs") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserSongPlayHistory", b => - { - b.HasOne("Melodee.Common.Data.Models.Song", "Song") - .WithMany() - .HasForeignKey("SongId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Melodee.Common.Data.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Song"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Album", b => - { - b.Navigation("Contributors"); - - b.Navigation("Songs"); - - b.Navigation("UserAlbums"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Artist", b => - { - b.Navigation("Albums"); - - b.Navigation("Contributors"); - - b.Navigation("RelatedArtists"); - - b.Navigation("UserArtists"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Chart", b => - { - b.Navigation("Items"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Library", b => - { - b.Navigation("AccessControls"); - - b.Navigation("ScanHistories"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PartySession", b => - { - b.Navigation("Participants"); - - b.Navigation("PlaybackState"); - - b.Navigation("QueueItems"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Playlist", b => - { - b.Navigation("Songs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.PodcastChannel", b => - { - b.Navigation("Episodes"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Request", b => - { - b.Navigation("Comments"); - - b.Navigation("Participants"); - - b.Navigation("UserStates"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.RequestComment", b => - { - b.Navigation("Replies"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.Song", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("Contributors"); - - b.Navigation("PlayQues"); - - b.Navigation("Playlists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.User", b => - { - b.Navigation("Bookmarks"); - - b.Navigation("GroupMemberships"); - - b.Navigation("Pins"); - - b.Navigation("PlayQues"); - - b.Navigation("Players"); - - b.Navigation("Playlists"); - - b.Navigation("RefreshTokens"); - - b.Navigation("Shares"); - - b.Navigation("SocialLogins"); - - b.Navigation("UserAlbums"); - - b.Navigation("UserArtists"); - - b.Navigation("UserSongs"); - }); - - modelBuilder.Entity("Melodee.Common.Data.Models.UserGroup", b => - { - b.Navigation("LibraryAccessControls"); - - b.Navigation("Members"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.cs b/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.cs deleted file mode 100644 index 26e7d9dae..000000000 --- a/src/Melodee.Common/Migrations/20260116202735_AddUserLibraryACL.cs +++ /dev/null @@ -1,230 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddUserLibraryACL : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId1", - table: "PartySessions"); - - migrationBuilder.DropIndex( - name: "IX_PartySessions_ActiveEndpointId1", - table: "PartySessions"); - - migrationBuilder.DropColumn( - name: "ActiveEndpointId1", - table: "PartySessions"); - - migrationBuilder.AddUniqueConstraint( - name: "AK_PartySessionEndpoints_ApiKey", - table: "PartySessionEndpoints", - column: "ApiKey"); - - migrationBuilder.CreateTable( - name: "UserGroups", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserGroups", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "LibraryAccessControls", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - LibraryId = table.Column(type: "integer", nullable: false), - UserGroupId = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_LibraryAccessControls", x => x.Id); - table.ForeignKey( - name: "FK_LibraryAccessControls_Libraries_LibraryId", - column: x => x.LibraryId, - principalTable: "Libraries", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_LibraryAccessControls_UserGroups_UserGroupId", - column: x => x.UserGroupId, - principalTable: "UserGroups", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserGroupMembers", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - UserGroupId = table.Column(type: "integer", nullable: false), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserGroupMembers", x => x.Id); - table.ForeignKey( - name: "FK_UserGroupMembers_UserGroups_UserGroupId", - column: x => x.UserGroupId, - principalTable: "UserGroups", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserGroupMembers_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "UserGroups", - columns: new[] { "Id", "ApiKey", "CreatedAt", "Description", "IsLocked", "LastUpdatedAt", "Name", "Notes", "SortOrder", "Tags" }, - values: new object[] { 1, new Guid("5dd33e32-e1b8-a880-64a9-fdf28e2da613"), NodaTime.Instant.FromUnixTimeTicks(0L), "Default group for all users", false, null, "All Users", null, 0, null }); - - migrationBuilder.CreateIndex( - name: "IX_LibraryAccessControls_ApiKey", - table: "LibraryAccessControls", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_LibraryAccessControls_LibraryId", - table: "LibraryAccessControls", - column: "LibraryId"); - - migrationBuilder.CreateIndex( - name: "IX_LibraryAccessControls_LibraryId_UserGroupId", - table: "LibraryAccessControls", - columns: new[] { "LibraryId", "UserGroupId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_LibraryAccessControls_UserGroupId", - table: "LibraryAccessControls", - column: "UserGroupId"); - - migrationBuilder.CreateIndex( - name: "IX_UserGroupMembers_ApiKey", - table: "UserGroupMembers", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserGroupMembers_UserGroupId", - table: "UserGroupMembers", - column: "UserGroupId"); - - migrationBuilder.CreateIndex( - name: "IX_UserGroupMembers_UserId", - table: "UserGroupMembers", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserGroupMembers_UserId_UserGroupId", - table: "UserGroupMembers", - columns: new[] { "UserId", "UserGroupId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserGroups_ApiKey", - table: "UserGroups", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserGroups_Name", - table: "UserGroups", - column: "Name", - unique: true); - - migrationBuilder.AddForeignKey( - name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId", - table: "PartySessions", - column: "ActiveEndpointId", - principalTable: "PartySessionEndpoints", - principalColumn: "ApiKey", - onDelete: ReferentialAction.SetNull); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId", - table: "PartySessions"); - - migrationBuilder.DropTable( - name: "LibraryAccessControls"); - - migrationBuilder.DropTable( - name: "UserGroupMembers"); - - migrationBuilder.DropTable( - name: "UserGroups"); - - migrationBuilder.DropUniqueConstraint( - name: "AK_PartySessionEndpoints_ApiKey", - table: "PartySessionEndpoints"); - - migrationBuilder.AddColumn( - name: "ActiveEndpointId1", - table: "PartySessions", - type: "integer", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_PartySessions_ActiveEndpointId1", - table: "PartySessions", - column: "ActiveEndpointId1"); - - migrationBuilder.AddForeignKey( - name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId1", - table: "PartySessions", - column: "ActiveEndpointId1", - principalTable: "PartySessionEndpoints", - principalColumn: "Id"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.cs b/src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.cs deleted file mode 100644 index 2185481c9..000000000 --- a/src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.cs +++ /dev/null @@ -1,138 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using NodaTime; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Melodee.Common.Migrations -{ - /// - public partial class AddPlaylistUploadedFileTables : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "PlaylistUploadedFiles", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "integer", nullable: false), - OriginalFileName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - ContentType = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - Length = table.Column(type: "bigint", nullable: false), - Content = table.Column(type: "bytea", nullable: false), - PlaylistId = table.Column(type: "integer", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PlaylistUploadedFiles", x => x.Id); - table.ForeignKey( - name: "FK_PlaylistUploadedFiles_Playlists_PlaylistId", - column: x => x.PlaylistId, - principalTable: "Playlists", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_PlaylistUploadedFiles_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PlaylistUploadedFileItems", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PlaylistUploadedFileId = table.Column(type: "integer", nullable: false), - SongId = table.Column(type: "integer", nullable: true), - Status = table.Column(type: "integer", nullable: false), - RawReference = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), - NormalizedReference = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), - HintsJson = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - LastAttemptAt = table.Column(type: "timestamp with time zone", nullable: true), - IsLocked = table.Column(type: "boolean", nullable: false), - SortOrder = table.Column(type: "integer", nullable: false), - ApiKey = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), - Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), - Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), - Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PlaylistUploadedFileItems", x => x.Id); - table.ForeignKey( - name: "FK_PlaylistUploadedFileItems_PlaylistUploadedFiles_PlaylistUpl~", - column: x => x.PlaylistUploadedFileId, - principalTable: "PlaylistUploadedFiles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PlaylistUploadedFileItems_Songs_SongId", - column: x => x.SongId, - principalTable: "Songs", - principalColumn: "Id"); - }); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFileItems_ApiKey", - table: "PlaylistUploadedFileItems", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFileItems_PlaylistUploadedFileId_SortOrder", - table: "PlaylistUploadedFileItems", - columns: new[] { "PlaylistUploadedFileId", "SortOrder" }); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFileItems_SongId", - table: "PlaylistUploadedFileItems", - column: "SongId"); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFileItems_Status", - table: "PlaylistUploadedFileItems", - column: "Status"); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFiles_ApiKey", - table: "PlaylistUploadedFiles", - column: "ApiKey", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFiles_PlaylistId", - table: "PlaylistUploadedFiles", - column: "PlaylistId"); - - migrationBuilder.CreateIndex( - name: "IX_PlaylistUploadedFiles_UserId_OriginalFileName", - table: "PlaylistUploadedFiles", - columns: new[] { "UserId", "OriginalFileName" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PlaylistUploadedFileItems"); - - migrationBuilder.DropTable( - name: "PlaylistUploadedFiles"); - } - } -} diff --git a/src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.Designer.cs b/src/Melodee.Common/Migrations/20260524160636_InitialBaseline.Designer.cs similarity index 99% rename from src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.Designer.cs rename to src/Melodee.Common/Migrations/20260524160636_InitialBaseline.Designer.cs index 713f8afa5..cf0540603 100644 --- a/src/Melodee.Common/Migrations/20260118041115_AddPlaylistUploadedFileTables.Designer.cs +++ b/src/Melodee.Common/Migrations/20260524160636_InitialBaseline.Designer.cs @@ -13,15 +13,15 @@ namespace Melodee.Common.Migrations { [DbContext(typeof(MelodeeDbContext))] - [Migration("20260118041115_AddPlaylistUploadedFileTables")] - partial class AddPlaylistUploadedFileTables + [Migration("20260524160636_InitialBaseline")] + partial class InitialBaseline { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("ProductVersion", "10.0.8") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -54,7 +54,8 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("integer"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("Comment") .HasMaxLength(4000) @@ -217,7 +218,8 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("character varying(62000)"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); @@ -417,7 +419,8 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("Comment") .HasMaxLength(1000) @@ -606,7 +609,8 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone"); b.Property("LinkConfidence") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("LinkNotes") .HasMaxLength(1000) @@ -3316,7 +3320,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) Id = 905, ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", + Comment = "Storage path to hold MusicBrainz downloaded files and database.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.storagePath", @@ -3340,7 +3344,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) Id = 907, ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", + Comment = "Number of records to import from MusicBrainz downloaded db dump before committing to local database.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.importBatchSize", @@ -4707,7 +4711,8 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("integer"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("ChannelCount") .HasColumnType("integer"); diff --git a/src/Melodee.Common/Migrations/20260524160636_InitialBaseline.cs b/src/Melodee.Common/Migrations/20260524160636_InitialBaseline.cs new file mode 100644 index 000000000..3cd51b4c9 --- /dev/null +++ b/src/Melodee.Common/Migrations/20260524160636_InitialBaseline.cs @@ -0,0 +1,3215 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using NodaTime; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Melodee.Common.Migrations +{ + /// + public partial class InitialBaseline : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Charts", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Slug = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + SourceName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + SourceUrl = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + Year = table.Column(type: "integer", nullable: true), + IsVisible = table.Column(type: "boolean", nullable: false), + IsGeneratedPlaylistEnabled = table.Column(type: "boolean", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Charts", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "JobHistories", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + JobName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + StartedAt = table.Column(type: "timestamp with time zone", nullable: false), + CompletedAt = table.Column(type: "timestamp with time zone", nullable: true), + DurationInMs = table.Column(type: "double precision", nullable: true), + Success = table.Column(type: "boolean", nullable: false), + ErrorMessage = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + WasManualTrigger = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_JobHistories", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Libraries", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ArtistCount = table.Column(type: "integer", nullable: true), + AlbumCount = table.Column(type: "integer", nullable: true), + SongCount = table.Column(type: "integer", nullable: true), + Path = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + Type = table.Column(type: "integer", nullable: false), + LastScanAt = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Libraries", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "PodcastChannels", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + FeedUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + TitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + SiteUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + ImageUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + CoverArtLocalPath = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Etag = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + LastModified = table.Column(type: "timestamp with time zone", nullable: true), + LastSyncAt = table.Column(type: "timestamp with time zone", nullable: true), + LastSyncAttemptAt = table.Column(type: "timestamp with time zone", nullable: true), + LastSyncError = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + ConsecutiveFailureCount = table.Column(type: "integer", nullable: false), + NextSyncAt = table.Column(type: "timestamp with time zone", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false), + MaxDownloadedEpisodes = table.Column(type: "integer", nullable: true), + MaxStorageBytes = table.Column(type: "bigint", nullable: true), + AutoDownloadEnabled = table.Column(type: "boolean", nullable: false), + RefreshIntervalHours = table.Column(type: "integer", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PodcastChannels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "RadioStations", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + StreamUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + HomePageUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_RadioStations", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "SearchHistories", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + ByUserId = table.Column(type: "integer", nullable: false), + ByUserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + SearchQuery = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + FoundArtistsCount = table.Column(type: "integer", nullable: false), + FoundAlbumsCount = table.Column(type: "integer", nullable: false), + FoundSongsCount = table.Column(type: "integer", nullable: false), + FoundOtherItems = table.Column(type: "integer", nullable: false), + SearchDurationInMs = table.Column(type: "double precision", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_SearchHistories", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Settings", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Key = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), + Comment = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Category = table.Column(type: "integer", nullable: true), + Value = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Settings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "ShareActivities", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ShareId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + ByUserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Client = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), + IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ShareActivities", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "UserGroups", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserGroups", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + UserNameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Email = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + EmailNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + EmailConfirmedDate = table.Column(type: "timestamp with time zone", nullable: true), + PublicKey = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + PasswordEncrypted = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + PasswordHash = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + PasswordHashAlgorithm = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + OpenSubsonicSecretProtected = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + LastLoginAt = table.Column(type: "timestamp with time zone", nullable: true), + LastActivityAt = table.Column(type: "timestamp with time zone", nullable: true), + IsAdmin = table.Column(type: "boolean", nullable: false), + IsEditor = table.Column(type: "boolean", nullable: false), + HasSettingsRole = table.Column(type: "boolean", nullable: false), + HasDownloadRole = table.Column(type: "boolean", nullable: false), + HasUploadRole = table.Column(type: "boolean", nullable: false), + HasPlaylistRole = table.Column(type: "boolean", nullable: false), + HasCoverArtRole = table.Column(type: "boolean", nullable: false), + HasCommentRole = table.Column(type: "boolean", nullable: false), + HasPodcastRole = table.Column(type: "boolean", nullable: false), + HasStreamRole = table.Column(type: "boolean", nullable: false), + HasJukeboxRole = table.Column(type: "boolean", nullable: false), + HasShareRole = table.Column(type: "boolean", nullable: false), + IsScrobblingEnabled = table.Column(type: "boolean", nullable: false), + LastFmSessionKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + TimeZoneId = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + PreferredLanguage = table.Column(type: "character varying(10)", maxLength: 10, nullable: true), + PreferredTheme = table.Column(type: "character varying(20)", maxLength: 20, nullable: true), + HatedGenres = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + StarredGenres = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + PasswordResetToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + PasswordResetTokenExpiresAt = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Artists", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + SortName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + RealName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Directory = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + Roles = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + AlbumCount = table.Column(type: "integer", nullable: false), + SongCount = table.Column(type: "integer", nullable: false), + LibraryId = table.Column(type: "integer", nullable: false), + Biography = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + ImageCount = table.Column(type: "integer", nullable: true), + MetaDataStatus = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + PlayedCount = table.Column(type: "integer", nullable: false), + ItunesId = table.Column(type: "text", nullable: true), + AmgId = table.Column(type: "text", nullable: true), + DeezerId = table.Column(type: "integer", nullable: true), + DiscogsId = table.Column(type: "text", nullable: true), + WikiDataId = table.Column(type: "text", nullable: true), + MusicBrainzId = table.Column(type: "uuid", nullable: true), + LastFmId = table.Column(type: "text", nullable: true), + SpotifyId = table.Column(type: "text", nullable: true), + CalculatedRating = table.Column(type: "numeric(18,6)", precision: 18, scale: 6, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Artists", x => x.Id); + table.ForeignKey( + name: "FK_Artists_Libraries_LibraryId", + column: x => x.LibraryId, + principalTable: "Libraries", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "LibraryScanHistories", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LibraryId = table.Column(type: "integer", nullable: false), + ForArtistId = table.Column(type: "integer", nullable: true), + ForAlbumId = table.Column(type: "integer", nullable: true), + FoundArtistsCount = table.Column(type: "integer", nullable: false), + FoundAlbumsCount = table.Column(type: "integer", nullable: false), + FoundSongsCount = table.Column(type: "integer", nullable: false), + DurationInMs = table.Column(type: "double precision", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_LibraryScanHistories", x => x.Id); + table.ForeignKey( + name: "FK_LibraryScanHistories_Libraries_LibraryId", + column: x => x.LibraryId, + principalTable: "Libraries", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PodcastEpisodes", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + PodcastChannelId = table.Column(type: "integer", nullable: false), + Guid = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + TitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + PublishDate = table.Column(type: "timestamp with time zone", nullable: true), + EnclosureUrl = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + EnclosureLength = table.Column(type: "bigint", nullable: true), + MimeType = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + EpisodeKey = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + DownloadStatus = table.Column(type: "integer", nullable: false), + DownloadError = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + LocalPath = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + LocalFileSize = table.Column(type: "bigint", nullable: true), + Duration = table.Column(type: "interval", nullable: true), + QueuedAt = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PodcastEpisodes", x => x.Id); + table.ForeignKey( + name: "FK_PodcastEpisodes_PodcastChannels_PodcastChannelId", + column: x => x.PodcastChannelId, + principalTable: "PodcastChannels", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "LibraryAccessControls", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + LibraryId = table.Column(type: "integer", nullable: false), + UserGroupId = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_LibraryAccessControls", x => x.Id); + table.ForeignKey( + name: "FK_LibraryAccessControls_Libraries_LibraryId", + column: x => x.LibraryId, + principalTable: "Libraries", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_LibraryAccessControls_UserGroups_UserGroupId", + column: x => x.UserGroupId, + principalTable: "UserGroups", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "JellyfinAccessTokens", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + TokenHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + TokenPrefixHash = table.Column(type: "character varying(8)", maxLength: 8, nullable: false), + TokenSalt = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUsedAt = table.Column(type: "timestamp with time zone", nullable: true), + ExpiresAt = table.Column(type: "timestamp with time zone", nullable: true), + RevokedAt = table.Column(type: "timestamp with time zone", nullable: true), + Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Device = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + DeviceId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Version = table.Column(type: "character varying(255)", maxLength: 255, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_JellyfinAccessTokens", x => x.Id); + table.ForeignKey( + name: "FK_JellyfinAccessTokens_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PartySessionEndpoints", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + OwnerUserId = table.Column(type: "integer", nullable: true), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Type = table.Column(type: "integer", nullable: false), + CapabilitiesJson = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + LastSeenAt = table.Column(type: "timestamp with time zone", nullable: true), + IsShared = table.Column(type: "boolean", nullable: false), + Room = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PartySessionEndpoints", x => x.Id); + table.UniqueConstraint("AK_PartySessionEndpoints_ApiKey", x => x.ApiKey); + table.ForeignKey( + name: "FK_PartySessionEndpoints_Users_OwnerUserId", + column: x => x.OwnerUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "Players", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + UserAgent = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + UserId = table.Column(type: "integer", nullable: false), + Client = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), + IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + LastSeenAt = table.Column(type: "timestamp with time zone", nullable: false), + MaxBitRate = table.Column(type: "integer", nullable: true), + ScrobbleEnabled = table.Column(type: "boolean", nullable: false), + TranscodingId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Hostname = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Players", x => x.Id); + table.ForeignKey( + name: "FK_Players_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "RefreshTokens", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + HashedToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + TokenFamily = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + IssuedAt = table.Column(type: "timestamp with time zone", nullable: false), + ExpiresAt = table.Column(type: "timestamp with time zone", nullable: false), + RevokedAt = table.Column(type: "timestamp with time zone", nullable: true), + RevokedReason = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + ReplacedByToken = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + SessionStartedAt = table.Column(type: "timestamp with time zone", nullable: false), + DeviceId = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + UserAgent = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_RefreshTokens", x => x.Id); + table.ForeignKey( + name: "FK_RefreshTokens_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Requests", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ApiKey = table.Column(type: "uuid", nullable: false), + Category = table.Column(type: "integer", nullable: false), + Status = table.Column(type: "integer", nullable: false), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: false), + ArtistName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + TargetArtistApiKey = table.Column(type: "uuid", nullable: true), + AlbumTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + TargetAlbumApiKey = table.Column(type: "uuid", nullable: true), + SongTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + TargetSongApiKey = table.Column(type: "uuid", nullable: true), + ReleaseYear = table.Column(type: "integer", nullable: true), + ExternalUrl = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + Notes = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + CreatedByUserId = table.Column(type: "integer", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedByUserId = table.Column(type: "integer", nullable: false), + LastActivityAt = table.Column(type: "timestamp with time zone", nullable: false), + LastActivityUserId = table.Column(type: "integer", nullable: true), + LastActivityType = table.Column(type: "integer", nullable: false), + ArtistNameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + AlbumTitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + SongTitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + DescriptionNormalized = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Requests", x => x.Id); + table.ForeignKey( + name: "FK_Requests_Users_CreatedByUserId", + column: x => x.CreatedByUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Requests_Users_LastActivityUserId", + column: x => x.LastActivityUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_Requests_Users_UpdatedByUserId", + column: x => x.UpdatedByUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "Shares", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + ShareId = table.Column(type: "integer", nullable: false), + ShareType = table.Column(type: "integer", nullable: false), + ShareUniqueId = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ExpiresAt = table.Column(type: "timestamp with time zone", nullable: true), + IsDownloadable = table.Column(type: "boolean", nullable: false), + LastVisitedAt = table.Column(type: "timestamp with time zone", nullable: true), + VisitCount = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Shares", x => x.Id); + table.ForeignKey( + name: "FK_Shares_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "SmartPlaylists", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + MqlQuery = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), + EntityType = table.Column(type: "character varying(20)", maxLength: 20, nullable: false), + LastResultCount = table.Column(type: "integer", nullable: false), + LastEvaluatedAt = table.Column(type: "timestamp with time zone", nullable: true), + IsPublic = table.Column(type: "boolean", nullable: false), + NormalizedQuery = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_SmartPlaylists", x => x.Id); + table.ForeignKey( + name: "FK_SmartPlaylists_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserEqualizerPresets", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + BandsJson = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), + IsDefault = table.Column(type: "boolean", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserEqualizerPresets", x => x.Id); + table.ForeignKey( + name: "FK_UserEqualizerPresets_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserGroupMembers", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + UserGroupId = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserGroupMembers", x => x.Id); + table.ForeignKey( + name: "FK_UserGroupMembers_UserGroups_UserGroupId", + column: x => x.UserGroupId, + principalTable: "UserGroups", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserGroupMembers_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserPins", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + PinId = table.Column(type: "integer", nullable: false), + PinType = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserPins", x => x.Id); + table.ForeignKey( + name: "FK_UserPins_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserPlaybackSettings", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + CrossfadeDuration = table.Column(type: "double precision", nullable: false), + GaplessPlayback = table.Column(type: "boolean", nullable: false), + VolumeNormalization = table.Column(type: "boolean", nullable: false), + ReplayGain = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + AudioQuality = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + EqualizerPreset = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + LastUsedDevice = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserPlaybackSettings", x => x.Id); + table.ForeignKey( + name: "FK_UserPlaybackSettings_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserSocialLogins", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + Provider = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Subject = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Email = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + DisplayName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + HostedDomain = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + LastLoginAt = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserSocialLogins", x => x.Id); + table.ForeignKey( + name: "FK_UserSocialLogins_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Albums", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ArtistId = table.Column(type: "integer", nullable: false), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + NameNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + SortName = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + AlbumStatus = table.Column(type: "smallint", nullable: false), + MetaDataStatus = table.Column(type: "integer", nullable: false), + ImageCount = table.Column(type: "integer", nullable: true), + AlbumType = table.Column(type: "smallint", nullable: false), + OriginalReleaseDate = table.Column(type: "date", nullable: true), + ReleaseDate = table.Column(type: "date", nullable: false), + IsCompilation = table.Column(type: "boolean", nullable: false), + SongCount = table.Column(type: "smallint", nullable: true), + Duration = table.Column(type: "double precision", nullable: false), + Genres = table.Column(type: "text[]", maxLength: 2000, nullable: true), + Moods = table.Column(type: "text[]", maxLength: 2000, nullable: true), + Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + ReplayGain = table.Column(type: "double precision", nullable: true), + ReplayPeak = table.Column(type: "double precision", nullable: true), + Directory = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + PlayedCount = table.Column(type: "integer", nullable: false), + ItunesId = table.Column(type: "text", nullable: true), + AmgId = table.Column(type: "text", nullable: true), + DeezerId = table.Column(type: "integer", nullable: true), + DiscogsId = table.Column(type: "text", nullable: true), + WikiDataId = table.Column(type: "text", nullable: true), + MusicBrainzId = table.Column(type: "uuid", nullable: true), + LastFmId = table.Column(type: "text", nullable: true), + SpotifyId = table.Column(type: "text", nullable: true), + CalculatedRating = table.Column(type: "numeric(18,6)", precision: 18, scale: 6, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Albums", x => x.Id); + table.ForeignKey( + name: "FK_Albums_Artists_ArtistId", + column: x => x.ArtistId, + principalTable: "Artists", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ArtistRelation", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ArtistId = table.Column(type: "integer", nullable: false), + RelatedArtistId = table.Column(type: "integer", nullable: false), + ArtistRelationType = table.Column(type: "integer", nullable: false), + RelationStart = table.Column(type: "timestamp with time zone", nullable: true), + RelationEnd = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ArtistRelation", x => x.Id); + table.ForeignKey( + name: "FK_ArtistRelation_Artists_ArtistId", + column: x => x.ArtistId, + principalTable: "Artists", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ArtistRelation_Artists_RelatedArtistId", + column: x => x.RelatedArtistId, + principalTable: "Artists", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserArtists", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + ArtistId = table.Column(type: "integer", nullable: false), + IsStarred = table.Column(type: "boolean", nullable: false), + IsHated = table.Column(type: "boolean", nullable: false), + StarredAt = table.Column(type: "timestamp with time zone", nullable: true), + Rating = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserArtists", x => x.Id); + table.ForeignKey( + name: "FK_UserArtists_Artists_ArtistId", + column: x => x.ArtistId, + principalTable: "Artists", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserArtists_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PodcastEpisodeBookmarks", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + PodcastEpisodeId = table.Column(type: "integer", nullable: false), + PositionSeconds = table.Column(type: "integer", nullable: false), + Comment = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PodcastEpisodeBookmarks", x => x.Id); + table.ForeignKey( + name: "FK_PodcastEpisodeBookmarks_PodcastEpisodes_PodcastEpisodeId", + column: x => x.PodcastEpisodeId, + principalTable: "PodcastEpisodes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PodcastEpisodeBookmarks_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserPodcastEpisodePlayHistories", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + PodcastEpisodeId = table.Column(type: "integer", nullable: false), + PlayedAt = table.Column(type: "timestamp with time zone", nullable: false), + Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ByUserAgent = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + SecondsPlayed = table.Column(type: "integer", nullable: true), + Source = table.Column(type: "smallint", nullable: false), + IsNowPlaying = table.Column(type: "boolean", nullable: false), + LastHeartbeatAt = table.Column(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserPodcastEpisodePlayHistories", x => x.Id); + table.ForeignKey( + name: "FK_UserPodcastEpisodePlayHistories_PodcastEpisodes_PodcastEpis~", + column: x => x.PodcastEpisodeId, + principalTable: "PodcastEpisodes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserPodcastEpisodePlayHistories_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PartySessions", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + OwnerUserId = table.Column(type: "integer", nullable: false), + Status = table.Column(type: "integer", nullable: false), + JoinCodeHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ActiveEndpointId = table.Column(type: "uuid", nullable: true), + QueueRevision = table.Column(type: "bigint", nullable: false), + PlaybackRevision = table.Column(type: "bigint", nullable: false), + IsQueueLocked = table.Column(type: "boolean", nullable: false), + IsEndpointOffline = table.Column(type: "boolean", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PartySessions", x => x.Id); + table.ForeignKey( + name: "FK_PartySessions_PartySessionEndpoints_ActiveEndpointId", + column: x => x.ActiveEndpointId, + principalTable: "PartySessionEndpoints", + principalColumn: "ApiKey", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_PartySessions_Users_OwnerUserId", + column: x => x.OwnerUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserDeviceProfiles", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + PlayerId = table.Column(type: "integer", nullable: true), + IsDefaultProfile = table.Column(type: "boolean", nullable: false), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + DirectPlay = table.Column(type: "boolean", nullable: false), + TargetCodec = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + MaxBitrate = table.Column(type: "integer", nullable: true), + ResampleRate = table.Column(type: "integer", nullable: true), + Priority = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserDeviceProfiles", x => x.Id); + table.ForeignKey( + name: "FK_UserDeviceProfiles_Players_PlayerId", + column: x => x.PlayerId, + principalTable: "Players", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_UserDeviceProfiles_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "RequestComments", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ApiKey = table.Column(type: "uuid", nullable: false), + RequestId = table.Column(type: "integer", nullable: false), + ParentCommentId = table.Column(type: "integer", nullable: true), + Body = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: false), + IsSystem = table.Column(type: "boolean", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + CreatedByUserId = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_RequestComments", x => x.Id); + table.ForeignKey( + name: "FK_RequestComments_RequestComments_ParentCommentId", + column: x => x.ParentCommentId, + principalTable: "RequestComments", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_RequestComments_Requests_RequestId", + column: x => x.RequestId, + principalTable: "Requests", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_RequestComments_Users_CreatedByUserId", + column: x => x.CreatedByUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "RequestParticipants", + columns: table => new + { + RequestId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false), + IsCreator = table.Column(type: "boolean", nullable: false), + IsCommenter = table.Column(type: "boolean", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_RequestParticipants", x => new { x.RequestId, x.UserId }); + table.ForeignKey( + name: "FK_RequestParticipants_Requests_RequestId", + column: x => x.RequestId, + principalTable: "Requests", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_RequestParticipants_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "RequestUserStates", + columns: table => new + { + RequestId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false), + LastSeenAt = table.Column(type: "timestamp with time zone", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_RequestUserStates", x => new { x.RequestId, x.UserId }); + table.ForeignKey( + name: "FK_RequestUserStates_Requests_RequestId", + column: x => x.RequestId, + principalTable: "Requests", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_RequestUserStates_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ChartItems", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ChartId = table.Column(type: "integer", nullable: false), + Rank = table.Column(type: "integer", nullable: false), + ArtistName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + AlbumTitle = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ReleaseYear = table.Column(type: "integer", nullable: true), + LinkedArtistId = table.Column(type: "integer", nullable: true), + LinkedAlbumId = table.Column(type: "integer", nullable: true), + LinkStatus = table.Column(type: "smallint", nullable: false), + LinkConfidence = table.Column(type: "numeric(18,6)", precision: 18, scale: 6, nullable: true), + LinkNotes = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ChartItems", x => x.Id); + table.ForeignKey( + name: "FK_ChartItems_Albums_LinkedAlbumId", + column: x => x.LinkedAlbumId, + principalTable: "Albums", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_ChartItems_Artists_LinkedArtistId", + column: x => x.LinkedArtistId, + principalTable: "Artists", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_ChartItems_Charts_ChartId", + column: x => x.ChartId, + principalTable: "Charts", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Songs", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + AlbumId = table.Column(type: "integer", nullable: false), + Title = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + TitleSort = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + TitleNormalized = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Genres = table.Column(type: "text[]", maxLength: 2000, nullable: true), + Moods = table.Column(type: "text[]", maxLength: 2000, nullable: true), + Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + ReplayGain = table.Column(type: "double precision", nullable: true), + ReplayPeak = table.Column(type: "double precision", nullable: true), + ImageCount = table.Column(type: "integer", nullable: true), + SongNumber = table.Column(type: "integer", nullable: false), + FileName = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false), + Lyrics = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + FileSize = table.Column(type: "bigint", nullable: false), + FileHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + PartTitles = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + Duration = table.Column(type: "double precision", nullable: false), + SamplingRate = table.Column(type: "integer", nullable: false), + BitRate = table.Column(type: "integer", nullable: false), + BitDepth = table.Column(type: "integer", nullable: false), + BPM = table.Column(type: "integer", nullable: false), + ContentType = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ChannelCount = table.Column(type: "integer", nullable: true), + IsVbr = table.Column(type: "boolean", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + PlayedCount = table.Column(type: "integer", nullable: false), + ItunesId = table.Column(type: "text", nullable: true), + AmgId = table.Column(type: "text", nullable: true), + DeezerId = table.Column(type: "integer", nullable: true), + DiscogsId = table.Column(type: "text", nullable: true), + WikiDataId = table.Column(type: "text", nullable: true), + MusicBrainzId = table.Column(type: "uuid", nullable: true), + LastFmId = table.Column(type: "text", nullable: true), + SpotifyId = table.Column(type: "text", nullable: true), + CalculatedRating = table.Column(type: "numeric(18,6)", precision: 18, scale: 6, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Songs", x => x.Id); + table.ForeignKey( + name: "FK_Songs_Albums_AlbumId", + column: x => x.AlbumId, + principalTable: "Albums", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserAlbums", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + AlbumId = table.Column(type: "integer", nullable: false), + PlayedCount = table.Column(type: "integer", nullable: false), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + IsStarred = table.Column(type: "boolean", nullable: false), + IsHated = table.Column(type: "boolean", nullable: false), + StarredAt = table.Column(type: "timestamp with time zone", nullable: true), + Rating = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserAlbums", x => x.Id); + table.ForeignKey( + name: "FK_UserAlbums_Albums_AlbumId", + column: x => x.AlbumId, + principalTable: "Albums", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserAlbums_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PartyAuditEvents", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + PartySessionId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false), + EventType = table.Column(type: "integer", nullable: false), + PayloadJson = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PartyAuditEvents", x => x.Id); + table.ForeignKey( + name: "FK_PartyAuditEvents_PartySessions_PartySessionId", + column: x => x.PartySessionId, + principalTable: "PartySessions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PartyAuditEvents_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PartyQueueItems", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + PartySessionId = table.Column(type: "integer", nullable: false), + SongApiKey = table.Column(type: "uuid", nullable: false), + EnqueuedByUserId = table.Column(type: "integer", nullable: false), + EnqueuedAt = table.Column(type: "timestamp with time zone", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + Source = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Note = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PartyQueueItems", x => x.Id); + table.UniqueConstraint("AK_PartyQueueItems_ApiKey", x => x.ApiKey); + table.ForeignKey( + name: "FK_PartyQueueItems_PartySessions_PartySessionId", + column: x => x.PartySessionId, + principalTable: "PartySessions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PartyQueueItems_Users_EnqueuedByUserId", + column: x => x.EnqueuedByUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "PartySessionParticipants", + columns: table => new + { + PartySessionId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false), + Role = table.Column(type: "integer", nullable: false), + JoinedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastSeenAt = table.Column(type: "timestamp with time zone", nullable: true), + IsBanned = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PartySessionParticipants", x => new { x.PartySessionId, x.UserId }); + table.ForeignKey( + name: "FK_PartySessionParticipants_PartySessions_PartySessionId", + column: x => x.PartySessionId, + principalTable: "PartySessions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PartySessionParticipants_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Bookmarks", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: false), + Comment = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + Position = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true), + AlternateNames = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + LastMetaDataUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + PlayedCount = table.Column(type: "integer", nullable: false), + ItunesId = table.Column(type: "text", nullable: true), + AmgId = table.Column(type: "text", nullable: true), + DeezerId = table.Column(type: "integer", nullable: true), + DiscogsId = table.Column(type: "text", nullable: true), + WikiDataId = table.Column(type: "text", nullable: true), + MusicBrainzId = table.Column(type: "uuid", nullable: true), + LastFmId = table.Column(type: "text", nullable: true), + SpotifyId = table.Column(type: "text", nullable: true), + CalculatedRating = table.Column(type: "numeric(18,6)", precision: 18, scale: 6, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.Id); + table.ForeignKey( + name: "FK_Bookmarks_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Bookmarks_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Contributors", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Role = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + SubRole = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + ArtistId = table.Column(type: "integer", nullable: true), + ContributorName = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), + MetaTagIdentifier = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: true), + AlbumId = table.Column(type: "integer", nullable: false), + ContributorType = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Contributors", x => x.Id); + table.ForeignKey( + name: "FK_Contributors_Albums_AlbumId", + column: x => x.AlbumId, + principalTable: "Albums", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Contributors_Artists_ArtistId", + column: x => x.ArtistId, + principalTable: "Artists", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Contributors_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "Playlists", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Comment = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + UserId = table.Column(type: "integer", nullable: false), + IsPublic = table.Column(type: "boolean", nullable: false), + SongCount = table.Column(type: "smallint", nullable: true), + Duration = table.Column(type: "double precision", nullable: false), + AllowedUserIds = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + SongId = table.Column(type: "integer", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Playlists", x => x.Id); + table.ForeignKey( + name: "FK_Playlists_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Playlists_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PlayQues", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: false), + SongApiKey = table.Column(type: "uuid", nullable: false), + IsCurrentSong = table.Column(type: "boolean", nullable: false), + ChangedBy = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + Position = table.Column(type: "double precision", nullable: false), + PlayQueId = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PlayQues", x => x.Id); + table.ForeignKey( + name: "FK_PlayQues_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PlayQues_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserSongPlayHistories", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: false), + PlayedAt = table.Column(type: "timestamp with time zone", nullable: false), + Client = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ByUserAgent = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + IpAddress = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + SecondsPlayed = table.Column(type: "integer", nullable: true), + Source = table.Column(type: "smallint", nullable: false), + IsNowPlaying = table.Column(type: "boolean", nullable: false), + LastHeartbeatAt = table.Column(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserSongPlayHistories", x => x.Id); + table.ForeignKey( + name: "FK_UserSongPlayHistories_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserSongPlayHistories_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserSongs", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: false), + PlayedCount = table.Column(type: "integer", nullable: false), + LastPlayedAt = table.Column(type: "timestamp with time zone", nullable: true), + IsStarred = table.Column(type: "boolean", nullable: false), + IsHated = table.Column(type: "boolean", nullable: false), + StarredAt = table.Column(type: "timestamp with time zone", nullable: true), + Rating = table.Column(type: "integer", nullable: false), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserSongs", x => x.Id); + table.ForeignKey( + name: "FK_UserSongs_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserSongs_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PartyPlaybackStates", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + PartySessionId = table.Column(type: "integer", nullable: false), + CurrentQueueItemApiKey = table.Column(type: "uuid", nullable: true), + PositionSeconds = table.Column(type: "double precision", nullable: false), + IsPlaying = table.Column(type: "boolean", nullable: false), + Volume = table.Column(type: "double precision", nullable: true), + LastHeartbeatAt = table.Column(type: "timestamp with time zone", nullable: true), + UpdatedByUserId = table.Column(type: "integer", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PartyPlaybackStates", x => x.Id); + table.ForeignKey( + name: "FK_PartyPlaybackStates_PartyQueueItems_CurrentQueueItemApiKey", + column: x => x.CurrentQueueItemApiKey, + principalTable: "PartyQueueItems", + principalColumn: "ApiKey", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_PartyPlaybackStates_PartySessions_PartySessionId", + column: x => x.PartySessionId, + principalTable: "PartySessions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PartyPlaybackStates_Users_UpdatedByUserId", + column: x => x.UpdatedByUserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "PlaylistSong", + columns: table => new + { + SongId = table.Column(type: "integer", nullable: false), + PlaylistId = table.Column(type: "integer", nullable: false), + SongApiKey = table.Column(type: "uuid", nullable: false), + PlaylistOrder = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PlaylistSong", x => new { x.SongId, x.PlaylistId }); + table.ForeignKey( + name: "FK_PlaylistSong_Playlists_PlaylistId", + column: x => x.PlaylistId, + principalTable: "Playlists", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PlaylistSong_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PlaylistUploadedFiles", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + OriginalFileName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + ContentType = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + Length = table.Column(type: "bigint", nullable: false), + Content = table.Column(type: "bytea", nullable: false), + PlaylistId = table.Column(type: "integer", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PlaylistUploadedFiles", x => x.Id); + table.ForeignKey( + name: "FK_PlaylistUploadedFiles_Playlists_PlaylistId", + column: x => x.PlaylistId, + principalTable: "Playlists", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_PlaylistUploadedFiles_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PlaylistUploadedFileItems", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + PlaylistUploadedFileId = table.Column(type: "integer", nullable: false), + SongId = table.Column(type: "integer", nullable: true), + Status = table.Column(type: "integer", nullable: false), + RawReference = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), + NormalizedReference = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: false), + HintsJson = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + LastAttemptAt = table.Column(type: "timestamp with time zone", nullable: true), + IsLocked = table.Column(type: "boolean", nullable: false), + SortOrder = table.Column(type: "integer", nullable: false), + ApiKey = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + LastUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + Tags = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + Notes = table.Column(type: "character varying(4000)", maxLength: 4000, nullable: true), + Description = table.Column(type: "character varying(62000)", maxLength: 62000, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PlaylistUploadedFileItems", x => x.Id); + table.ForeignKey( + name: "FK_PlaylistUploadedFileItems_PlaylistUploadedFiles_PlaylistUpl~", + column: x => x.PlaylistUploadedFileId, + principalTable: "PlaylistUploadedFiles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PlaylistUploadedFileItems_Songs_SongId", + column: x => x.SongId, + principalTable: "Songs", + principalColumn: "Id"); + }); + + migrationBuilder.InsertData( + table: "Libraries", + columns: new[] { "Id", "AlbumCount", "ApiKey", "ArtistCount", "CreatedAt", "Description", "IsLocked", "LastScanAt", "LastUpdatedAt", "Name", "Notes", "Path", "SongCount", "SortOrder", "Tags", "Type" }, + values: new object[,] + { + { 1, null, new Guid("6d455bb8-7292-cba0-2fd0-c18e40ad8fc5"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Files in this directory are scanned and Album information is gathered via processing.", false, null, null, "Inbound", null, "/app/inbound/", null, 0, null, 1 }, + { 2, null, new Guid("020e8374-59db-6d77-bdf8-b308e278b48c"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "The staging directory to place processed files into (Inbound -> Staging -> Library).", false, null, null, "Staging", null, "/app/staging/", null, 0, null, 2 }, + { 3, null, new Guid("f63a6428-55d5-847b-3d09-3fa3b69b66ae"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "The library directory to place processed, reviewed and ready to use music files into.", false, null, null, "Storage", null, "/app/storage/", null, 0, null, 3 }, + { 4, null, new Guid("277e8907-d170-780d-816d-92111e007606"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where user images are stored.", false, null, null, "User Images", null, "/app/user-images/", null, 0, null, 4 }, + { 5, null, new Guid("4be2eea8-571d-6936-ecf6-5f99dd829c04"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where playlist data is stored.", false, null, null, "Playlist Data", null, "/app/playlists/", null, 0, null, 5 }, + { 6, null, new Guid("62453b56-402b-8f9e-073b-e2d31e9f7cf9"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where templates are stored, organized by language code.", false, null, null, "Templates", null, "/app/templates/", null, 0, null, 7 }, + { 7, null, new Guid("01d52713-b3cf-48fa-f085-7704baee6dc5"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where podcast media files are stored.", false, null, null, "Podcasts", null, "/app/podcasts/", null, 0, null, 8 }, + { 8, null, new Guid("f718b349-eccc-ff93-f992-c190e1ed2616"), null, NodaTime.Instant.FromUnixTimeTicks(0L), "Library where custom theme packs are stored.", false, null, null, "Themes", null, "/app/themes/", null, 0, null, 9 } + }); + + migrationBuilder.InsertData( + table: "Settings", + columns: new[] { "Id", "ApiKey", "Category", "Comment", "CreatedAt", "Description", "IsLocked", "Key", "LastUpdatedAt", "Notes", "SortOrder", "Tags", "Value" }, + values: new object[,] + { + { 1, new Guid("5c08b275-6c25-972d-2aef-7e2f6ba227f2"), null, "Add a default filter to show only albums with this or less number of songs.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "filtering.lessThanSongCount", null, null, 0, null, "3" }, + { 2, new Guid("c4996dec-2489-820e-eb83-6ddbd1144557"), null, "Add a default filter to show only albums with this or less duration.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "filtering.lessThanDuration", null, null, 0, null, "720000" }, + { 4, new Guid("9a803c96-ca09-9208-d9e6-04083a5a11ea"), null, "Default page size when view including pagination.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "defaults.pagesize", null, null, 0, null, "100" }, + { 6, new Guid("6b5c2528-7420-0e22-f136-6db9b89d9d7e"), null, "Amount of time to display a Toast then auto-close (in milliseconds.)", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "userinterface.toastAutoCloseTime", null, null, 0, null, "2000" }, + { 9, new Guid("56a687bc-652d-9128-d7fd-52125c518a1c"), null, "List of ignored articles when scanning media (pipe delimited).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.ignoredArticles", null, null, 0, null, "THE|EL|LA|LOS|LAS|LE|LES|OS|AS|O|A" }, + { 26, new Guid("cf595b62-3932-5723-49f3-1eba81bbf147"), null, "Fragments of artist names to replace (JSON Dictionary).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.artistNameReplacements", null, null, 0, null, "{'AC/DC': ['AC; DC', 'AC;DC', 'AC/ DC', 'AC DC'] , 'Love/Hate': ['Love; Hate', 'Love;Hate', 'Love/ Hate', 'Love Hate'] }" }, + { 27, new Guid("fd8eb2e5-9d1d-95ad-93e3-4129f18ca952"), null, "If OrigAlbumYear [TOR, TORY, TDOR] value is invalid use current year.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.doUseCurrentYearAsDefaultOrigAlbumYearValue", null, null, 0, null, "false" }, + { 28, new Guid("286bf3c1-9d25-a8ce-d78d-964db9d15b37"), null, "Delete original files when processing. When false a copy if made, else original is deleted after processed.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.doDeleteOriginal", null, null, 0, null, "false" }, + { 29, new Guid("4f830df7-7942-6353-1d84-946f271c084e"), null, "Extension to add to file when converted, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.convertedExtension", null, null, 0, null, "_converted" }, + { 30, new Guid("d2e7b90f-8c28-863f-f96f-14627ac06394"), null, "Extension to add to file when processed, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.processedExtension", null, null, 0, null, "_processed" }, + { 32, new Guid("1e80ad9a-a13e-b515-9262-1c0dd6e51bb9"), null, "When processing over write any existing Melodee data files, otherwise skip and leave in place.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.doOverrideExistingMelodeeDataFiles", null, null, 0, null, "true" }, + { 34, new Guid("7d283a60-e2c1-e3f3-6b1f-3c988a89cfc9"), null, "The maximum number of files to process, set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.maximumProcessingCount", null, null, 0, null, "0" }, + { 35, new Guid("2277af16-56ba-327d-44d4-3f1e1dba4366"), null, "Maximum allowed length of album directory name.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.maximumAlbumDirectoryNameLength", null, null, 0, null, "255" }, + { 36, new Guid("9ebc2634-b7d3-12c4-3487-606d1ed8d376"), null, "Maximum allowed length of artist directory name.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.maximumArtistDirectoryNameLength", null, null, 0, null, "255" }, + { 37, new Guid("a4f7e266-d355-e402-865f-da369963cc03"), null, "Fragments to remove from album titles (JSON array).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.albumTitleRemovals", null, null, 0, null, "['^', '~', '#']" }, + { 38, new Guid("f29aff69-bc10-d860-692e-275a4ffa4138"), null, "Fragments to remove from song titles (JSON array).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.songTitleRemovals", null, null, 0, null, "[';', '(Remaster)', 'Remaster']" }, + { 39, new Guid("4585dcb2-e48c-b99a-8995-91f56931e11e"), null, "Continue processing if an error is encountered.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.doContinueOnDirectoryProcessingErrors", null, null, 0, null, "true" }, + { 41, new Guid("02088d3e-a9d2-44a4-0975-41c1f695ebdb"), null, "Is scripting enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scripting.enabled", null, null, 0, null, "false" }, + { 42, new Guid("262c50a8-e2a9-53d6-2bce-82d075d843ec"), null, "Script to run before processing the inbound directory, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scripting.preDiscoveryScript", null, null, 0, null, "" }, + { 43, new Guid("e999453e-9193-fbfe-a533-ab541773943e"), null, "Script to run after processing the inbound directory, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scripting.postDiscoveryScript", null, null, 0, null, "" }, + { 45, new Guid("5f2c94f9-dfb3-2e40-06b1-9dd70a9f9f62"), null, "Don't create performer contributors for these performer names.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.ignoredPerformers", null, null, 0, null, "" }, + { 46, new Guid("443fb612-30f1-1b13-4903-ad55009dceac"), null, "Don't create production contributors for these production names.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.ignoredProduction", null, null, 0, null, "['www.t.me;pmedia_music']" }, + { 47, new Guid("7beaf728-5c50-dabd-5ec2-f5a5138c0822"), null, "Don't create publisher contributors for these artist names.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.ignoredPublishers", null, null, 0, null, "['P.M.E.D.I.A','PMEDIA','PMEDIA GROUP']" }, + { 49, new Guid("44b73f87-3a4a-c6d2-e3cf-b37ea7937563"), null, "Private key used to encrypt/decrypt passwords for Subsonic authentication. Use https://generate-random.org/encryption-key-generator?count=1&bytes=32&cipher=aes-256-cbc&string=&password= to generate a new key.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "encryption.privateKey", null, null, 0, null, "H+Kiik6VMKfTD2MesF1GoMjczTrD5RhuKckJ5+/UQWOdWajGcsEC3yEnlJ5eoy8Y" }, + { 50, new Guid("582676cf-cf72-3c09-1055-5a3b2de29a6d"), null, "Prefix to apply to indicate an album directory is a duplicate album for an artist. If left blank the default of '__duplicate_' will be used.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.duplicateAlbumPrefix", null, null, 0, null, "_duplicate_ " }, + { 53, new Guid("b48052d3-aab1-dc24-9188-17617fc90575"), null, "Processing batching size. Allowed range is between [250] and [1000]. ", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "defaults.batchSize", null, null, 0, null, "250" }, + { 54, new Guid("7464b039-de31-f876-5731-46ce62500117"), null, "When processing folders immediately delete any files with these extensions. (JSON array).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.fileExtensionsToDelete", null, null, 0, null, "['log', 'lnk', 'lrc', 'doc']" }, + { 100, new Guid("a4c47b7c-30c3-0603-cf8e-79863111f251"), 1, "OpenSubsonic server supported Subsonic API version.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "openSubsonicServer.openSubsonic.serverSupportedVersion", null, null, 0, null, "1.16.1" }, + { 101, new Guid("5a954c6a-9afc-43eb-8f93-74047d725365"), 1, "OpenSubsonic server name.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "openSubsonicServer.openSubsonicServer.type", null, null, 0, null, "Melodee" }, + { 103, new Guid("95256bc3-92e8-a83e-e26d-b643d93d621a"), 1, "OpenSubsonic email to use in License responses.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "openSubsonicServer.openSubsonicServerLicenseEmail", null, null, 0, null, "noreply@localhost.lan" }, + { 104, new Guid("8f6dca18-fe45-9659-260b-41dd9a66cbf3"), 1, "Limit the number of artists to include in an indexes request, set to zero for 32k per index (really not recommended with tens of thousands of artists and mobile clients timeout downloading indexes, a user can find an artist by search)", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "openSubsonicServer.openSubsonicServer.index.artistLimit", null, null, 0, null, "1000" }, + { 200, new Guid("e0a0ca63-aeb9-650e-99c4-d95a791c4a2e"), 2, "Enable Melodee to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "conversion.enabled", null, null, 0, null, "true" }, + { 201, new Guid("5025f51c-262d-e7c5-ad27-70bddf43b476"), 2, "Bitrate to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "conversion.bitrate", null, null, 0, null, "384" }, + { 202, new Guid("92cbee43-6e9f-a236-a271-f9cc5bb5d262"), 2, "Vbr to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "conversion.vbrLevel", null, null, 0, null, "4" }, + { 203, new Guid("f88fb399-23c1-ef86-3e56-93f63f8bb809"), 2, "Sampling rate to convert non-mp3 media files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "conversion.samplingRate", null, null, 0, null, "48000" }, + { 300, new Guid("318f1b81-ec0f-a6c6-05e0-805f67b8caab"), 3, "Short Format to use when displaying full dates.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "formatting.dateTimeDisplayFormatShort", null, null, 0, null, "yyyyMMdd HH\\:mm" }, + { 301, new Guid("3a06decd-3d51-f70b-c0ac-d640e8bd6f40"), 3, "Format to use when displaying activity related dates (e.g., processing messages)", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "formatting.dateTimeDisplayActivityFormat", null, null, 0, null, "hh\\:mm\\:ss\\.ffff" }, + { 400, new Guid("5dbf9b93-4c1f-e317-37ed-97b3e641772c"), 4, "Include any embedded images from media files into the Melodee data file.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.doLoadEmbeddedImages", null, null, 0, null, "true" }, + { 401, new Guid("8425f968-cb8a-a4bc-3174-a0b07641102e"), 4, "Small image size (square image, this is both width and height).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.smallSize", null, null, 0, null, "300" }, + { 402, new Guid("6261b063-df52-a8b2-70f7-9619312364d2"), 4, "Medium image size (square image, this is both width and height).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.mediumSize", null, null, 0, null, "600" }, + { 403, new Guid("f9d91f6b-172c-e91f-6c90-5257aa9e3e01"), 4, "Large image size (square image, this is both width and height), if larger than will be resized to this image, leave blank to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.largeSize", null, null, 0, null, "1600" }, + { 404, new Guid("08a6111e-0d45-a09c-86e6-979cd47183be"), 4, "Maximum allowed number of images for an album, this includes all image types (Front, Rear, etc.), set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.maximumNumberOfAlbumImages", null, null, 0, null, "25" }, + { 405, new Guid("9320ee39-2c29-9fb3-1269-cf38f6cf32d3"), 4, "Maximum allowed number of images for an artist, set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.maximumNumberOfArtistImages", null, null, 0, null, "25" }, + { 406, new Guid("c0d392bc-7142-5407-4e11-a1f2c6d8eb55"), 4, "Images under this size are considered invalid, set to zero to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "imaging.minimumImageSize", null, null, 0, null, "300" }, + { 500, new Guid("2ebd9e4b-a639-f66a-0574-69d765fa4a07"), 5, "Is Magic processing enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.enabled", null, null, 0, null, "true" }, + { 501, new Guid("bd081306-fb20-dbb6-c886-da6a42b080af"), 5, "Renumber songs when doing magic processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doRenumberSongs", null, null, 0, null, "true" }, + { 502, new Guid("13bde2a9-4729-31d3-5fbf-6e0ab74437a0"), 5, "Remove featured artists from song artist when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doRemoveFeaturingArtistFromSongArtist", null, null, 0, null, "true" }, + { 503, new Guid("c5221bbc-e459-1944-cf36-b874dd93247c"), 5, "Remove featured artists from song title when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doRemoveFeaturingArtistFromSongTitle", null, null, 0, null, "true" }, + { 504, new Guid("30e02344-8dec-c2ea-d203-22a803f93b48"), 5, "Replace song artist separators with standard ID3 separator ('/') when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doReplaceSongsArtistSeparators", null, null, 0, null, "true" }, + { 505, new Guid("163cf2d8-cb34-8509-0df3-8b681a0ae74b"), 5, "Set the song year to current year if invalid or missing when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doSetYearToCurrentIfInvalid", null, null, 0, null, "false" }, + { 506, new Guid("616cc758-2766-8f2f-71ae-2f99b98aba63"), 5, "Remove unwanted text from album title when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doRemoveUnwantedTextFromAlbumTitle", null, null, 0, null, "true" }, + { 507, new Guid("b9afe726-36f8-0b50-3a3d-a6eeb53b8e37"), 5, "Remove unwanted text from song titles when doing magic.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "magic.doRemoveUnwantedTextFromSongTitles", null, null, 0, null, "true" }, + { 700, new Guid("8ccfdf94-55f8-bd0e-cb7c-8052d6d2ca89"), 7, "Process of CueSheet files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "plugin.cueSheet.enabled", null, null, 0, null, "true" }, + { 701, new Guid("9edd4162-4e67-68e5-67e6-65a023fa3d41"), 7, "Process of M3U files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "plugin.m3u.enabled", null, null, 0, null, "true" }, + { 702, new Guid("cd93553f-b424-dd6d-00da-1fd3de10267c"), 7, "Process of NFO files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "plugin.nfo.enabled", null, null, 0, null, "true" }, + { 703, new Guid("cffd7f2e-95f3-28a2-e315-699f413b13ff"), 7, "Process of Simple File Verification (SFV) files during processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "plugin.simpleFileVerification.enabled", null, null, 0, null, "true" }, + { 704, new Guid("50894ac8-809a-d90f-79ef-8169b16b0296"), 7, "If true then all comments will be removed from media files.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "processing.doDeleteComments", null, null, 0, null, "true" }, + { 902, new Guid("1ff4eed4-1cc5-d453-6ee5-947784437a60"), 9, "User agent to send with Search engine requests.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.userAgent", null, null, 0, null, "Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0" }, + { 903, new Guid("b233a0ac-9743-0b2b-1055-014c23f4147f"), 9, "Default page size when performing a search engine search.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.defaultPageSize", null, null, 0, null, "20" }, + { 904, new Guid("cec2c46f-97dd-347a-53ea-c2b8a8ee6bf2"), 9, "Is MusicBrainz search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.musicbrainz.enabled", null, null, 0, null, "true" }, + { 905, new Guid("798d3376-ff64-b590-f204-c46bef35339a"), 9, "Storage path to hold MusicBrainz downloaded files and database.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.musicbrainz.storagePath", null, null, 0, null, "/melodee_test/search-engine-storage/musicbrainz/" }, + { 906, new Guid("2fbfdf98-8a93-ded3-1eed-4582f6ec2dc6"), 9, "Maximum number of batches import from MusicBrainz downloaded db dump (this setting is usually used during debugging), set to zero for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.musicbrainz.importMaximumToProcess", null, null, 0, null, "0" }, + { 907, new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), 9, "Number of records to import from MusicBrainz downloaded db dump before committing to local database.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.musicbrainz.importBatchSize", null, null, 0, null, "50000" }, + { 908, new Guid("f5f8842b-1294-e4ab-95e1-2b60fa955b09"), 9, "Timestamp of when last MusicBrainz import was successful.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.musicbrainz.importLastImportTimestamp", null, null, 0, null, "" }, + { 910, new Guid("1546df1d-4e92-2d14-9092-44d6daeb689e"), 9, "Is Spotify search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.spotify.enabled", null, null, 0, null, "false" }, + { 911, new Guid("e11913ea-3d25-8024-c207-30837c59fee1"), 9, "ApiKey used used with Spotify. See https://developer.spotify.com/ for more details.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.spotify.apiKey", null, null, 0, null, "" }, + { 912, new Guid("0c683b52-4b31-ea62-1421-f895264e8b29"), 9, "Shared secret used with Spotify. See https://developer.spotify.com/ for more details.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.spotify.sharedSecret", null, null, 0, null, "" }, + { 913, new Guid("7c9b3a2a-91ad-0f5a-cca2-d2a9ab7f4379"), 9, "Token obtained from Spotify using the ApiKey and the Secret, this json contains expiry information.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.spotify.accessToken", null, null, 0, null, "" }, + { 914, new Guid("4a089459-cc6b-d516-42c3-22ead8d2c7ac"), 9, "Is ITunes search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.itunes.enabled", null, null, 0, null, "true" }, + { 915, new Guid("b63db7ba-321a-46a2-7e6a-8dc75313945f"), 9, "Is LastFM search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.lastFm.Enabled", null, null, 0, null, "true" }, + { 916, new Guid("6c1087d4-e491-5a75-293d-c80ba2e59acb"), 9, "When performing a search engine search, the maximum allowed page size.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.maximumAllowedPageSize", null, null, 0, null, "1000" }, + { 917, new Guid("a9dddd78-8c93-9f48-fe2c-7d6cd303c32f"), 9, "Refresh albums for artists from search engine database every x days, set to zero to not refresh.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.artistSearchDatabaseRefreshInDays", null, null, 0, null, "14" }, + { 918, new Guid("dfc917eb-2be2-6a79-2f66-8fba157d5778"), 9, "Is Deezer search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.deezer.enabled", null, null, 0, null, "true" }, + { 919, new Guid("de923cf1-09d4-8a9d-14a2-d4dda9eb8556"), 9, "Is Metal API search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.metalApi.enabled", null, null, 0, null, "false" }, + { 1000, new Guid("26666288-7cc7-7af2-3404-8e026f1cb6a7"), 10, "Is scrobbling enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scrobbling.enabled", null, null, 0, null, "true" }, + { 1001, new Guid("8d90f3ba-2a9d-9f11-e8e9-684e2d1c013d"), 10, "Is scrobbling to Last.fm enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scrobbling.lastFm.Enabled", null, null, 0, null, "false" }, + { 1002, new Guid("d0716532-ca01-997a-75e1-45ca0b56e999"), 10, "ApiKey used used with last FM. See https://www.last.fm/api/authentication for more details.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scrobbling.lastFm.apiKey", null, null, 0, null, "" }, + { 1003, new Guid("244b20d4-551f-dd7e-fd6c-81caefa013e7"), 10, "Shared secret used with last FM. See https://www.last.fm/api/authentication for more details.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "scrobbling.lastFm.sharedSecret", null, null, 0, null, "" }, + { 1100, new Guid("84de96d4-42f4-1056-b509-d68d5ded3457"), 11, "Base URL for Melodee to use when building shareable links and image urls (e.g., 'https://server.domain.com:8080', 'http://server.domain.com').", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "system.baseUrl", null, null, 0, null, "** REQUIRED: THIS MUST BE EDITED **" }, + { 1101, new Guid("42a71bd4-6390-1880-cd7c-e5e19a4092b1"), 11, "Is downloading enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "system.isDownloadingEnabled", null, null, 0, null, "true" }, + { 1102, new Guid("79457a59-de2d-667d-2813-a79cd70427cc"), 11, "Maximum upload size in bytes for UI uploads.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "system.maxUploadSize", null, null, 0, null, "5242880" }, + { 1103, new Guid("9468bf96-8fea-8dfb-c1a9-7b764c5178c6"), 11, "Name for this Melodee instance (used in emails and UI branding).", NodaTime.Instant.FromUnixTimeTicks(0L), "Customize the display name of your Melodee instance. Defaults to 'Melodee' if not set.", false, "system.siteName", null, null, 0, null, "Melodee" }, + { 1200, new Guid("e0cefa09-426a-e3dd-a65a-498708d55e72"), 12, "Default format for transcoding.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "transcoding.default", null, null, 0, null, "raw" }, + { 1201, new Guid("e2be036e-1bfa-44bb-c8ee-abb86ba87fbf"), 12, "Default command to transcode MP3 for streaming.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "transcoding.command.mp3", null, null, 0, null, "{ 'format': 'Mp3', 'bitrate: 192, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f mp3 -' }" }, + { 1202, new Guid("17e73900-e7f3-a01b-2710-cbc01e43f7c5"), 12, "Default command to transcode using libopus for streaming.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "transcoding.command.opus", null, null, 0, null, "{ 'format': 'Opus', 'bitrate: 128, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a libopus -f opus -' }" }, + { 1203, new Guid("f160bbd0-5316-bf0e-2d20-498426f48241"), 12, "Default command to transcode to aac for streaming.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "transcoding.command.aac", null, null, 0, null, "{ 'format': 'Aac', 'bitrate: 256, 'command': 'ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -c:a aac -f adts -' }" }, + { 1300, new Guid("3ff6d2e5-dd61-c1de-c556-0a8f1169aa43"), 13, "The maximum value a song number can have for an album.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "validation.maximumSongNumber", null, null, 0, null, "9999" }, + { 1301, new Guid("70f56e2f-1c9a-05dc-7da7-c6347e3f1947"), 13, "Minimum allowed year for an album.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "validation.minimumAlbumYear", null, null, 0, null, "1860" }, + { 1302, new Guid("b257b1e3-3731-c980-137d-c4d0197753ce"), 13, "Maximum allowed year for an album.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "validation.maximumAlbumYear", null, null, 0, null, "2150" }, + { 1303, new Guid("b9fe8d2e-01b4-ed09-7d3a-23cfdd6ba221"), 13, "Minimum number of songs an album has to have to be considered valid, set to 0 to disable check.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "validation.minimumSongCount", null, null, 0, null, "3" }, + { 1304, new Guid("d9b766a1-cf5f-a185-028b-8303ecb12b4a"), 13, "Minimum duration of an album to be considered valid (in minutes), set to 0 to disable check.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "validation.minimumAlbumDuration", null, null, 0, null, "10" }, + { 1400, new Guid("a6bc32c4-deb2-21c3-b5a9-0aa463d6247a"), 14, "Cron expression to run the artist housekeeping job, set empty to disable. Default of '0 0 0/1 1/1 * ? *' will run every hour. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.artistHousekeeping.cronExpression", null, null, 0, null, "0 0 0/1 1/1 * ? *" }, + { 1401, new Guid("5ef2d5be-debf-facc-6a06-0055acb63c74"), 14, "Cron expression to run the library process job, set empty to disable. Default of '0 */10 * ? * *' Every 10 minutes. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.libraryProcess.cronExpression", null, null, 0, null, "0 */10 * ? * *" }, + { 1402, new Guid("67dc3cad-e46b-ad78-c9bc-25a65e487114"), 14, "Cron expression to run the library scan job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.libraryInsert.cronExpression", null, null, 0, null, "0 0 0 * * ?" }, + { 1403, new Guid("fab2408d-06d8-5ba8-78ff-db4b8d0a5c58"), 14, "Cron expression to run the musicbrainz database house keeping job, set empty to disable. Default of '0 0 12 1 * ?' will run first day of the month. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.musicbrainzUpdateDatabase.cronExpression", null, null, 0, null, "0 0 12 1 * ?" }, + { 1404, new Guid("219f3b33-dc1f-b3c2-143c-582a023e5b25"), 14, "Cron expression to run the artist search engine house keeping job, set empty to disable. Default of '0 0 0 * * ?' will run every day at 00:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.artistSearchEngineHousekeeping.cronExpression", null, null, 0, null, "0 0 0 * * ?" }, + { 1405, new Guid("c3f25109-36ca-e223-69a9-71a3d4083f00"), 14, "Cron expression to run the chart update job which links chart items to albums, set empty to disable. Default of '0 0 2 * * ?' will run every day at 02:00. See https://www.freeformatter.com/cron-expression-generator-quartz.html", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.chartUpdate.cronExpression", null, null, 0, null, "0 0 2 * * ?" }, + { 1406, new Guid("dcf2a737-2724-2310-abec-6d0204ff4bff"), 14, "Cron expression for staging auto-move job. Moves 'Ok' albums to storage. Default '0 */15 * * * ?' runs every 15 min. Also triggered after inbound processing.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.stagingAutoMove.cronExpression", null, null, 0, null, "0 */15 * * * ?" }, + { 1500, new Guid("77c527bc-5317-46da-d778-e7114791749f"), null, "Enable or disable email sending functionality", NodaTime.Instant.FromUnixTimeTicks(0L), "When true, enables SMTP email sending for password resets and notifications", false, "email.enabled", null, null, 0, null, "false" }, + { 1501, new Guid("1836553b-06a0-2fe4-35c0-fdf088520e61"), null, "Display name in From field of outgoing emails", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "email.fromName", null, null, 0, null, "Melodee" }, + { 1502, new Guid("28ce7a91-9dd3-bcdb-7cf2-2249037ff4a5"), null, "Email address in From field (REQUIRED for email sending)", NodaTime.Instant.FromUnixTimeTicks(0L), "Example: noreply@yourdomain.com", false, "email.fromEmail", null, null, 0, null, "" }, + { 1503, new Guid("100f5f84-1a12-8af4-1b43-349bfea18d90"), null, "SMTP server hostname (REQUIRED for email sending)", NodaTime.Instant.FromUnixTimeTicks(0L), "Example: smtp.gmail.com or smtp.sendgrid.net", false, "email.smtpHost", null, null, 0, null, "" }, + { 1504, new Guid("0f9b5ef0-1b03-2319-7e19-5fc2e9e7287d"), null, "SMTP server port", NodaTime.Instant.FromUnixTimeTicks(0L), "Common values: 587 (StartTLS), 465 (SSL), 25 (unencrypted)", false, "email.smtpPort", null, null, 0, null, "587" }, + { 1505, new Guid("41c53bd6-7fd6-bd69-673c-e352fa5f84a5"), null, "SMTP authentication username (optional)", NodaTime.Instant.FromUnixTimeTicks(0L), "Leave empty if SMTP server does not require authentication", false, "email.smtpUsername", null, null, 0, null, "" }, + { 1506, new Guid("893a9053-2b8f-8a32-4e6c-c9b3541341db"), null, "SMTP authentication password (optional, use env var email_smtpPassword)", NodaTime.Instant.FromUnixTimeTicks(0L), "For security, set via environment variable: email_smtpPassword", false, "email.smtpPassword", null, null, 0, null, "" }, + { 1507, new Guid("9a20a527-a2d9-628f-914a-c2fab2dc8496"), null, "Use SSL connection for SMTP", NodaTime.Instant.FromUnixTimeTicks(0L), "Set to true for port 465 (SSL), false for port 587 (StartTLS)", false, "email.smtpUseSsl", null, null, 0, null, "false" }, + { 1508, new Guid("1f6249d4-fb89-6266-9672-41d7a6109260"), null, "Use StartTLS for SMTP", NodaTime.Instant.FromUnixTimeTicks(0L), "Recommended: true for port 587", false, "email.smtpUseStartTls", null, null, 0, null, "true" }, + { 1509, new Guid("a268fe56-a265-c29d-fd82-e5efc61f0505"), null, "Password reset email subject line", NodaTime.Instant.FromUnixTimeTicks(0L), "Subject for password reset emails", false, "email.resetPassword.subject", null, null, 0, null, "Reset your Melodee password" }, + { 1600, new Guid("f27eb478-3910-50ce-7a05-86aff6d0f1ca"), null, "Password reset token expiry time in minutes", NodaTime.Instant.FromUnixTimeTicks(0L), "How long password reset links remain valid (default: 60 minutes)", false, "security.passwordResetTokenExpiryMinutes", null, null, 0, null, "60" }, + { 1700, new Guid("226cfbc6-3866-fa17-7729-23849a7b8077"), null, "Enable Jellyfin API compatibility", NodaTime.Instant.FromUnixTimeTicks(0L), "When enabled, Melodee exposes Jellyfin-compatible endpoints for third-party music players", false, "jellyfin.enabled", null, null, 0, null, "true" }, + { 1701, new Guid("eefa4040-71d4-b7b0-4218-52b5aa1c7408"), null, "Internal route prefix for Jellyfin API", NodaTime.Instant.FromUnixTimeTicks(0L), "The internal route prefix used for Jellyfin API endpoints (default: /api/jf)", false, "jellyfin.routePrefix", null, null, 0, null, "/api/jf" }, + { 1702, new Guid("57d8a083-6ad7-9d6f-a31f-8b4f94e7a2a0"), null, "Jellyfin token expiry time in hours", NodaTime.Instant.FromUnixTimeTicks(0L), "How long Jellyfin access tokens remain valid (default: 168 hours / 7 days)", false, "jellyfin.token.expiresAfterHours", null, null, 0, null, "168" }, + { 1703, new Guid("1696717a-dbe7-3278-52c1-bc43a5c7ed86"), null, "Maximum active Jellyfin tokens per user", NodaTime.Instant.FromUnixTimeTicks(0L), "The maximum number of active Jellyfin tokens allowed per user (default: 10)", false, "jellyfin.token.maxActivePerUser", null, null, 0, null, "10" }, + { 1704, new Guid("732d29c7-1df6-4084-b126-f485463a10a4"), null, "Allow legacy Emby/MediaBrowser headers", NodaTime.Instant.FromUnixTimeTicks(0L), "Allow X-Emby-* and X-MediaBrowser-* headers for authentication (default: true)", false, "jellyfin.token.allowLegacyHeaders", null, null, 0, null, "true" }, + { 1705, new Guid("57ef8277-a41c-a3e3-d68b-3e6c16a98728"), null, "Secret pepper for Jellyfin token hashing", NodaTime.Instant.FromUnixTimeTicks(0L), "Server-side secret used in token hash computation. Change this value in production for added security.", false, "jellyfin.token.pepper", null, null, 0, null, "ChangeThisPepperInProduction" }, + { 1706, new Guid("191427dc-3a4b-e304-fe21-9457435456d7"), null, "API requests allowed per period", NodaTime.Instant.FromUnixTimeTicks(0L), "Maximum number of Jellyfin API requests allowed per rate limit period (default: 200)", false, "jellyfin.rateLimit.apiRequestsPerPeriod", null, null, 0, null, "200" }, + { 1707, new Guid("e10e7d3e-d4e8-a507-7a8e-ff526828ddd1"), null, "Rate limit period in seconds", NodaTime.Instant.FromUnixTimeTicks(0L), "Duration of the rate limit period in seconds (default: 60)", false, "jellyfin.rateLimit.apiPeriodSeconds", null, null, 0, null, "60" }, + { 1708, new Guid("96e4d8c5-a98c-ecd1-755a-eaccd69eaa20"), null, "Concurrent streams per user", NodaTime.Instant.FromUnixTimeTicks(0L), "Maximum number of concurrent audio streams allowed per user (default: 2)", false, "jellyfin.rateLimit.streamConcurrentPerUser", null, null, 0, null, "2" }, + { 1709, new Guid("c7b11e69-6582-e227-97ae-37435339e58e"), 9, "Is Discogs search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.discogs.enabled", null, null, 0, null, "false" }, + { 1710, new Guid("33a0d80a-8a65-e692-30a9-e3d571759efe"), 9, "Discogs API user token for authentication.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.discogs.userToken", null, null, 0, null, "" }, + { 1711, new Guid("21837867-a824-2a66-fa7c-3583974874e4"), 9, "Is WikiData search engine enabled.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "searchEngine.wikidata.enabled", null, null, 0, null, "false" }, + { 1800, new Guid("8ee4c50d-9a7a-a4ef-66f1-74614a24313e"), 15, "Enable podcast support.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.enabled", null, null, 0, null, "true" }, + { 1801, new Guid("c3d99d92-ab8d-bdca-ab08-3cc6ea2d2860"), 15, "Allow HTTP (non-secure) URLs for podcast feeds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.allowHttp", null, null, 0, null, "false" }, + { 1802, new Guid("93b35ab7-14d0-0814-0d66-fe040e3ae4b8"), 15, "Timeout in seconds for HTTP requests to podcast feeds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.timeoutSeconds", null, null, 0, null, "30" }, + { 1803, new Guid("6b35ba44-07ac-645d-b2a3-9cadaa60ff3d"), 15, "Maximum number of HTTP redirects to follow for podcast feeds. Podcast CDNs often use multiple analytics redirects, so 10 is recommended.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.maxRedirects", null, null, 0, null, "10" }, + { 1804, new Guid("13168117-a286-23b5-5858-9f91485c6432"), 15, "Maximum size in bytes for podcast feed responses.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.http.maxFeedBytes", null, null, 0, null, "10485760" }, + { 1805, new Guid("1fceaf81-79eb-433c-de79-eabe193c46f8"), 15, "Maximum number of episodes to store per podcast channel.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.refresh.maxItemsPerChannel", null, null, 0, null, "500" }, + { 1806, new Guid("525bb5dc-989c-5154-0c7e-7f4b336032e3"), 15, "Maximum concurrent podcast episode downloads (global).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxConcurrent.global", null, null, 0, null, "2" }, + { 1807, new Guid("380ed177-9320-92a0-5a93-48bdcc040d35"), 15, "Maximum concurrent podcast episode downloads per user.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxConcurrent.perUser", null, null, 0, null, "1" }, + { 1808, new Guid("2d5158e7-495e-44a6-e06a-b5f1359f8ea2"), 15, "Maximum size in bytes for podcast episode downloads.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.download.maxEnclosureBytes", null, null, 0, null, "2147483648" }, + { 1809, new Guid("908afec1-3a49-5e62-26f5-d6977ef6b00c"), 15, "Number of days to keep downloaded episodes. 0 to disable retention.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.downloadedEpisodesInDays", null, null, 0, null, "0" }, + { 1810, new Guid("6f86302a-1d6d-b574-c77a-b6cfbefb5e0a"), 15, "Threshold in minutes to consider a downloading episode as stuck.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.recovery.stuckDownloadThresholdMinutes", null, null, 0, null, "60" }, + { 1811, new Guid("8d257a4b-b566-e0af-1044-9658d5ac27ea"), 15, "Threshold in hours to consider a temporary file orphaned.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.recovery.orphanedUsageThresholdHours", null, null, 0, null, "12" }, + { 1812, new Guid("737e544b-7490-d53e-a092-3fd6e2b629b4"), 15, "Maximum total storage in bytes for all podcasts per user. 0 for unlimited.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.quota.maxBytesPerUser", null, null, 0, null, "5368709120" }, + { 1813, new Guid("153a12d4-77b4-ccc3-1584-f3685d6c9e2e"), 15, "Keep only the last N downloaded episodes per channel. 0 to disable this policy.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.keepLastNEpisodes", null, null, 0, null, "0" }, + { 1814, new Guid("3da9402e-9566-c883-66e5-d232de677199"), 15, "Delete downloaded episodes after they have been played. false to disable.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "podcast.retention.keepUnplayedOnly", null, null, 0, null, "false" }, + { 1850, new Guid("dc79ceff-cd68-f412-8f99-7529615cb3e8"), 14, "Cron expression to run the podcast refresh job, set empty to disable. Default of '0 */15 * ? * *' runs every 15 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastRefresh.cronExpression", null, null, 0, null, "0 */15 * ? * *" }, + { 1851, new Guid("d29b11cc-d892-271a-9e2a-5eeacb795e39"), 14, "Cron expression to run the podcast download job, set empty to disable. Default of '0 */5 * ? * *' runs every 5 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastDownload.cronExpression", null, null, 0, null, "0 */5 * ? * *" }, + { 1852, new Guid("3b2df55c-cd9c-a51b-2c4c-8f566bf7b6d8"), 14, "Cron expression to run the podcast cleanup job, set empty to disable. Default of '0 0 2 * * ?' runs daily at 2 AM.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastCleanup.cronExpression", null, null, 0, null, "0 0 2 * * ?" }, + { 1853, new Guid("17b25fcb-6a54-291d-5927-28ade4b15a93"), 14, "Cron expression to run the podcast recovery job, set empty to disable. Default of '0 */30 * ? * *' runs every 30 minutes.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jobs.podcastRecovery.cronExpression", null, null, 0, null, "0 */30 * ? * *" }, + { 1900, new Guid("541a397c-740c-8b9d-f1ed-5f990cab92a1"), 16, "Enable Jukebox support for server-side playback.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jukebox.enabled", null, null, 0, null, "false" }, + { 1901, new Guid("4c886427-ffc2-d277-5950-6cf4b880b7be"), 16, "The type of backend to use for jukebox playback (e.g., 'mpv', 'mpd'). Leave empty for no backend.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "jukebox.backendType", null, null, 0, null, "" }, + { 1910, new Guid("e39d8312-cae1-ee40-266d-533077dbfdbb"), 16, "Path to the MPV executable. Leave empty to use system PATH.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.path", null, null, 0, null, "" }, + { 1911, new Guid("945df58f-0546-2e6c-ccc8-210b41e719b7"), 16, "Audio device to use for MPV playback. Leave empty for default device.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.audioDevice", null, null, 0, null, "" }, + { 1912, new Guid("7b99ed1d-9c95-3a2a-9aa7-aca68cda0223"), 16, "Extra command-line arguments to pass to MPV.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.extraArgs", null, null, 0, null, "" }, + { 1913, new Guid("45dfa023-d926-4364-33d1-245a9623dece"), 16, "Path for the MPV IPC socket. Leave empty for auto temp directory.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.socketPath", null, null, 0, null, "" }, + { 1914, new Guid("ac4199ff-57a6-9ded-7a8b-037b9df29a7f"), 16, "Initial volume level for MPV (0.0 to 1.0). Default is 0.8.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.initialVolume", null, null, 0, null, "0.8" }, + { 1915, new Guid("7893e826-0cc8-a0a2-12dc-5c2556212c4a"), 16, "Enable verbose debug output for MPV.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpv.enableDebugOutput", null, null, 0, null, "false" }, + { 1920, new Guid("bfcce639-8b21-dcc7-b54f-ce1d3ad074f0"), 16, "Unique name/identifier for this MPD instance (for multi-instance support).", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.instanceName", null, null, 0, null, "" }, + { 1921, new Guid("275a59ef-fe5d-c2b8-28df-a7bc4a04abdb"), 16, "Hostname or IP address of the MPD server.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.host", null, null, 0, null, "localhost" }, + { 1922, new Guid("515116f0-99ba-30cc-4b18-d722da60cd7f"), 16, "Port number for MPD connection.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.port", null, null, 0, null, "6600" }, + { 1923, new Guid("dbc39d88-00c0-0710-201e-dd387d745589"), 16, "Password for MPD authentication. Leave empty if no password.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.password", null, null, 0, null, "" }, + { 1924, new Guid("d1d4df5f-fb55-011e-ad6a-c29db5896073"), 16, "Timeout for MPD TCP connection and operations in milliseconds.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.timeoutMs", null, null, 0, null, "10000" }, + { 1925, new Guid("416030fd-3e69-d30e-789f-9203464ebc86"), 16, "Initial volume level for MPD (0.0 to 1.0). Default is 0.8.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.initialVolume", null, null, 0, null, "0.8" }, + { 1926, new Guid("5819d3ec-0b14-1731-2179-69ab1328140b"), 16, "Enable debug logging for MPD commands.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "mpd.enableDebugOutput", null, null, 0, null, "false" }, + { 1927, new Guid("df8f5291-a7c1-797c-1dea-5d302116b2c9"), 11, "Enable per-user and per-device transcoding profiles.", NodaTime.Instant.FromUnixTimeTicks(0L), null, false, "userDeviceProfile.enabled", null, null, 0, null, "true" } + }); + + migrationBuilder.InsertData( + table: "UserGroups", + columns: new[] { "Id", "ApiKey", "CreatedAt", "Description", "IsLocked", "LastUpdatedAt", "Name", "Notes", "SortOrder", "Tags" }, + values: new object[] { 1, new Guid("5dd33e32-e1b8-a880-64a9-fdf28e2da613"), NodaTime.Instant.FromUnixTimeTicks(0L), "Default group for all users", false, null, "All Users", null, 0, null }); + + migrationBuilder.CreateIndex( + name: "IX_Albums_ApiKey", + table: "Albums", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Albums_ArtistId_Name", + table: "Albums", + columns: new[] { "ArtistId", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Albums_ArtistId_NameNormalized", + table: "Albums", + columns: new[] { "ArtistId", "NameNormalized" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Albums_ArtistId_SortName", + table: "Albums", + columns: new[] { "ArtistId", "SortName" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Albums_MusicBrainzId", + table: "Albums", + column: "MusicBrainzId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Albums_SpotifyId", + table: "Albums", + column: "SpotifyId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ArtistRelation_ApiKey", + table: "ArtistRelation", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ArtistRelation_ArtistId_RelatedArtistId", + table: "ArtistRelation", + columns: new[] { "ArtistId", "RelatedArtistId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ArtistRelation_RelatedArtistId", + table: "ArtistRelation", + column: "RelatedArtistId"); + + migrationBuilder.CreateIndex( + name: "IX_Artists_ApiKey", + table: "Artists", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Artists_LibraryId", + table: "Artists", + column: "LibraryId"); + + migrationBuilder.CreateIndex( + name: "IX_Artists_MusicBrainzId", + table: "Artists", + column: "MusicBrainzId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Artists_Name", + table: "Artists", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Artists_NameNormalized", + table: "Artists", + column: "NameNormalized"); + + migrationBuilder.CreateIndex( + name: "IX_Artists_SortName", + table: "Artists", + column: "SortName"); + + migrationBuilder.CreateIndex( + name: "IX_Artists_SpotifyId", + table: "Artists", + column: "SpotifyId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Bookmarks_ApiKey", + table: "Bookmarks", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Bookmarks_MusicBrainzId", + table: "Bookmarks", + column: "MusicBrainzId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Bookmarks_SongId", + table: "Bookmarks", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmarks_SpotifyId", + table: "Bookmarks", + column: "SpotifyId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Bookmarks_UserId_SongId", + table: "Bookmarks", + columns: new[] { "UserId", "SongId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ChartItems_ChartId_LinkedAlbumId", + table: "ChartItems", + columns: new[] { "ChartId", "LinkedAlbumId" }); + + migrationBuilder.CreateIndex( + name: "IX_ChartItems_ChartId_Rank", + table: "ChartItems", + columns: new[] { "ChartId", "Rank" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ChartItems_LinkedAlbumId", + table: "ChartItems", + column: "LinkedAlbumId"); + + migrationBuilder.CreateIndex( + name: "IX_ChartItems_LinkedArtistId", + table: "ChartItems", + column: "LinkedArtistId"); + + migrationBuilder.CreateIndex( + name: "IX_Charts_ApiKey", + table: "Charts", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Charts_Slug", + table: "Charts", + column: "Slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Contributors_AlbumId", + table: "Contributors", + column: "AlbumId"); + + migrationBuilder.CreateIndex( + name: "IX_Contributors_ApiKey", + table: "Contributors", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Contributors_ArtistId_MetaTagIdentifier_SongId", + table: "Contributors", + columns: new[] { "ArtistId", "MetaTagIdentifier", "SongId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Contributors_ContributorName_MetaTagIdentifier_SongId", + table: "Contributors", + columns: new[] { "ContributorName", "MetaTagIdentifier", "SongId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Contributors_SongId", + table: "Contributors", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_JellyfinAccessTokens_TokenHash", + table: "JellyfinAccessTokens", + column: "TokenHash", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_JellyfinAccessTokens_TokenPrefixHash", + table: "JellyfinAccessTokens", + column: "TokenPrefixHash"); + + migrationBuilder.CreateIndex( + name: "IX_JellyfinAccessTokens_UserId", + table: "JellyfinAccessTokens", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_JellyfinAccessTokens_UserId_ExpiresAt_RevokedAt", + table: "JellyfinAccessTokens", + columns: new[] { "UserId", "ExpiresAt", "RevokedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_JobHistories_JobName_StartedAt", + table: "JobHistories", + columns: new[] { "JobName", "StartedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_JobHistories_StartedAt", + table: "JobHistories", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_Libraries_ApiKey", + table: "Libraries", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Libraries_Type", + table: "Libraries", + column: "Type", + unique: true, + filter: "\"Type\" != 3"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryAccessControls_ApiKey", + table: "LibraryAccessControls", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_LibraryAccessControls_LibraryId", + table: "LibraryAccessControls", + column: "LibraryId"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryAccessControls_LibraryId_UserGroupId", + table: "LibraryAccessControls", + columns: new[] { "LibraryId", "UserGroupId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_LibraryAccessControls_UserGroupId", + table: "LibraryAccessControls", + column: "UserGroupId"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryScanHistories_CreatedAt", + table: "LibraryScanHistories", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryScanHistories_ForAlbumId", + table: "LibraryScanHistories", + column: "ForAlbumId"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryScanHistories_ForArtistId", + table: "LibraryScanHistories", + column: "ForArtistId"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryScanHistories_LibraryId", + table: "LibraryScanHistories", + column: "LibraryId"); + + migrationBuilder.CreateIndex( + name: "IX_LibraryScanHistories_LibraryId_CreatedAt", + table: "LibraryScanHistories", + columns: new[] { "LibraryId", "CreatedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_PartyAuditEvents_ApiKey", + table: "PartyAuditEvents", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartyAuditEvents_PartySessionId", + table: "PartyAuditEvents", + column: "PartySessionId"); + + migrationBuilder.CreateIndex( + name: "IX_PartyAuditEvents_UserId", + table: "PartyAuditEvents", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_ApiKey", + table: "PartyPlaybackStates", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_CurrentQueueItemApiKey", + table: "PartyPlaybackStates", + column: "CurrentQueueItemApiKey"); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_IsPlaying", + table: "PartyPlaybackStates", + column: "IsPlaying"); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_LastHeartbeatAt", + table: "PartyPlaybackStates", + column: "LastHeartbeatAt"); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_PartySessionId", + table: "PartyPlaybackStates", + column: "PartySessionId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartyPlaybackStates_UpdatedByUserId", + table: "PartyPlaybackStates", + column: "UpdatedByUserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_ApiKey", + table: "PartyQueueItems", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_EnqueuedAt", + table: "PartyQueueItems", + column: "EnqueuedAt"); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_EnqueuedByUserId", + table: "PartyQueueItems", + column: "EnqueuedByUserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_PartySessionId", + table: "PartyQueueItems", + column: "PartySessionId"); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_PartySessionId_SortOrder", + table: "PartyQueueItems", + columns: new[] { "PartySessionId", "SortOrder" }); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_SongApiKey", + table: "PartyQueueItems", + column: "SongApiKey"); + + migrationBuilder.CreateIndex( + name: "IX_PartyQueueItems_SortOrder", + table: "PartyQueueItems", + column: "SortOrder"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_ApiKey", + table: "PartySessionEndpoints", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_IsShared", + table: "PartySessionEndpoints", + column: "IsShared"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_LastSeenAt", + table: "PartySessionEndpoints", + column: "LastSeenAt"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_OwnerUserId", + table: "PartySessionEndpoints", + column: "OwnerUserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_Room", + table: "PartySessionEndpoints", + column: "Room"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionEndpoints_Type", + table: "PartySessionEndpoints", + column: "Type"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionParticipants_IsBanned", + table: "PartySessionParticipants", + column: "IsBanned"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionParticipants_PartySessionId_UserId", + table: "PartySessionParticipants", + columns: new[] { "PartySessionId", "UserId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionParticipants_Role", + table: "PartySessionParticipants", + column: "Role"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessionParticipants_UserId", + table: "PartySessionParticipants", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessions_ActiveEndpointId", + table: "PartySessions", + column: "ActiveEndpointId"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessions_ApiKey", + table: "PartySessions", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PartySessions_OwnerUserId", + table: "PartySessions", + column: "OwnerUserId"); + + migrationBuilder.CreateIndex( + name: "IX_PartySessions_Status", + table: "PartySessions", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_Players_ApiKey", + table: "Players", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Players_UserId_Client_UserAgent", + table: "Players", + columns: new[] { "UserId", "Client", "UserAgent" }); + + migrationBuilder.CreateIndex( + name: "IX_Playlists_ApiKey", + table: "Playlists", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Playlists_SongId", + table: "Playlists", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_Playlists_UserId_Name", + table: "Playlists", + columns: new[] { "UserId", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistSong_PlaylistId", + table: "PlaylistSong", + column: "PlaylistId"); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistSong_SongId_PlaylistId", + table: "PlaylistSong", + columns: new[] { "SongId", "PlaylistId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFileItems_ApiKey", + table: "PlaylistUploadedFileItems", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFileItems_PlaylistUploadedFileId_SortOrder", + table: "PlaylistUploadedFileItems", + columns: new[] { "PlaylistUploadedFileId", "SortOrder" }); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFileItems_SongId", + table: "PlaylistUploadedFileItems", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFileItems_Status", + table: "PlaylistUploadedFileItems", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFiles_ApiKey", + table: "PlaylistUploadedFiles", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFiles_PlaylistId", + table: "PlaylistUploadedFiles", + column: "PlaylistId"); + + migrationBuilder.CreateIndex( + name: "IX_PlaylistUploadedFiles_UserId_OriginalFileName", + table: "PlaylistUploadedFiles", + columns: new[] { "UserId", "OriginalFileName" }); + + migrationBuilder.CreateIndex( + name: "IX_PlayQues_ApiKey", + table: "PlayQues", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PlayQues_SongId", + table: "PlayQues", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_PlayQues_UserId", + table: "PlayQues", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_PodcastChannels_ApiKey", + table: "PodcastChannels", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PodcastChannels_IsDeleted", + table: "PodcastChannels", + column: "IsDeleted"); + + migrationBuilder.CreateIndex( + name: "IX_PodcastChannels_NextSyncAt", + table: "PodcastChannels", + column: "NextSyncAt"); + + migrationBuilder.CreateIndex( + name: "IX_PodcastChannels_UserId_FeedUrl", + table: "PodcastChannels", + columns: new[] { "UserId", "FeedUrl" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodeBookmarks_PodcastEpisodeId", + table: "PodcastEpisodeBookmarks", + column: "PodcastEpisodeId"); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodeBookmarks_UserId_PodcastEpisodeId", + table: "PodcastEpisodeBookmarks", + columns: new[] { "UserId", "PodcastEpisodeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodes_ApiKey", + table: "PodcastEpisodes", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodes_PodcastChannelId_DownloadStatus", + table: "PodcastEpisodes", + columns: new[] { "PodcastChannelId", "DownloadStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodes_PodcastChannelId_EpisodeKey", + table: "PodcastEpisodes", + columns: new[] { "PodcastChannelId", "EpisodeKey" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PodcastEpisodes_PodcastChannelId_PublishDate", + table: "PodcastEpisodes", + columns: new[] { "PodcastChannelId", "PublishDate" }); + + migrationBuilder.CreateIndex( + name: "IX_RadioStations_ApiKey", + table: "RadioStations", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_RefreshTokens_ApiKey", + table: "RefreshTokens", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_RefreshTokens_ExpiresAt", + table: "RefreshTokens", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_RefreshTokens_HashedToken", + table: "RefreshTokens", + column: "HashedToken", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_RefreshTokens_TokenFamily", + table: "RefreshTokens", + column: "TokenFamily"); + + migrationBuilder.CreateIndex( + name: "IX_RefreshTokens_UserId", + table: "RefreshTokens", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_RequestComments_ApiKey", + table: "RequestComments", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_RequestComments_CreatedByUserId", + table: "RequestComments", + column: "CreatedByUserId"); + + migrationBuilder.CreateIndex( + name: "IX_RequestComments_ParentCommentId", + table: "RequestComments", + column: "ParentCommentId"); + + migrationBuilder.CreateIndex( + name: "IX_RequestComments_RequestId_CreatedAt_Id", + table: "RequestComments", + columns: new[] { "RequestId", "CreatedAt", "Id" }); + + migrationBuilder.CreateIndex( + name: "IX_RequestComments_RequestId_ParentCommentId_CreatedAt_Id", + table: "RequestComments", + columns: new[] { "RequestId", "ParentCommentId", "CreatedAt", "Id" }); + + migrationBuilder.CreateIndex( + name: "IX_RequestParticipants_UserId_RequestId", + table: "RequestParticipants", + columns: new[] { "UserId", "RequestId" }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_ApiKey", + table: "Requests", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Requests_CreatedAt_Id", + table: "Requests", + columns: new[] { "CreatedAt", "Id" }, + descending: new bool[0]); + + migrationBuilder.CreateIndex( + name: "IX_Requests_CreatedByUserId_CreatedAt_Id", + table: "Requests", + columns: new[] { "CreatedByUserId", "CreatedAt", "Id" }, + descending: new[] { false, true, true }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_LastActivityAt_Id", + table: "Requests", + columns: new[] { "LastActivityAt", "Id" }, + descending: new bool[0]); + + migrationBuilder.CreateIndex( + name: "IX_Requests_LastActivityUserId", + table: "Requests", + column: "LastActivityUserId"); + + migrationBuilder.CreateIndex( + name: "IX_Requests_Status_CreatedAt_Id", + table: "Requests", + columns: new[] { "Status", "CreatedAt", "Id" }, + descending: new[] { false, true, true }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_Status_CreatedByUserId_CreatedAt_Id", + table: "Requests", + columns: new[] { "Status", "CreatedByUserId", "CreatedAt", "Id" }, + descending: new[] { false, false, true, true }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_TargetAlbumApiKey_CreatedAt_Id", + table: "Requests", + columns: new[] { "TargetAlbumApiKey", "CreatedAt", "Id" }, + descending: new[] { false, true, true }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_TargetArtistApiKey_CreatedAt_Id", + table: "Requests", + columns: new[] { "TargetArtistApiKey", "CreatedAt", "Id" }, + descending: new[] { false, true, true }); + + migrationBuilder.CreateIndex( + name: "IX_Requests_UpdatedByUserId", + table: "Requests", + column: "UpdatedByUserId"); + + migrationBuilder.CreateIndex( + name: "IX_RequestUserStates_UserId_LastSeenAt", + table: "RequestUserStates", + columns: new[] { "UserId", "LastSeenAt" }); + + migrationBuilder.CreateIndex( + name: "IX_Settings_ApiKey", + table: "Settings", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Settings_Category", + table: "Settings", + column: "Category"); + + migrationBuilder.CreateIndex( + name: "IX_Settings_Key", + table: "Settings", + column: "Key", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Shares_ApiKey", + table: "Shares", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Shares_UserId", + table: "Shares", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_SmartPlaylists_ApiKey", + table: "SmartPlaylists", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_SmartPlaylists_IsPublic", + table: "SmartPlaylists", + column: "IsPublic"); + + migrationBuilder.CreateIndex( + name: "IX_SmartPlaylists_UserId", + table: "SmartPlaylists", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_SmartPlaylists_UserId_Name", + table: "SmartPlaylists", + columns: new[] { "UserId", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Songs_AlbumId_SongNumber", + table: "Songs", + columns: new[] { "AlbumId", "SongNumber" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Songs_ApiKey", + table: "Songs", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Songs_MusicBrainzId", + table: "Songs", + column: "MusicBrainzId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Songs_SpotifyId", + table: "Songs", + column: "SpotifyId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Songs_Title", + table: "Songs", + column: "Title"); + + migrationBuilder.CreateIndex( + name: "IX_UserAlbums_AlbumId", + table: "UserAlbums", + column: "AlbumId"); + + migrationBuilder.CreateIndex( + name: "IX_UserAlbums_ApiKey", + table: "UserAlbums", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserAlbums_UserId_AlbumId", + table: "UserAlbums", + columns: new[] { "UserId", "AlbumId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserArtists_ApiKey", + table: "UserArtists", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserArtists_ArtistId", + table: "UserArtists", + column: "ArtistId"); + + migrationBuilder.CreateIndex( + name: "IX_UserArtists_UserId_ArtistId", + table: "UserArtists", + columns: new[] { "UserId", "ArtistId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserDeviceProfiles_ApiKey", + table: "UserDeviceProfiles", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserDeviceProfiles_PlayerId", + table: "UserDeviceProfiles", + column: "PlayerId"); + + migrationBuilder.CreateIndex( + name: "IX_UserDeviceProfiles_UserId_IsDefaultProfile", + table: "UserDeviceProfiles", + columns: new[] { "UserId", "IsDefaultProfile" }); + + migrationBuilder.CreateIndex( + name: "IX_UserDeviceProfiles_UserId_PlayerId", + table: "UserDeviceProfiles", + columns: new[] { "UserId", "PlayerId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserEqualizerPresets_ApiKey", + table: "UserEqualizerPresets", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserEqualizerPresets_UserId_Name", + table: "UserEqualizerPresets", + columns: new[] { "UserId", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserGroupMembers_ApiKey", + table: "UserGroupMembers", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserGroupMembers_UserGroupId", + table: "UserGroupMembers", + column: "UserGroupId"); + + migrationBuilder.CreateIndex( + name: "IX_UserGroupMembers_UserId", + table: "UserGroupMembers", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserGroupMembers_UserId_UserGroupId", + table: "UserGroupMembers", + columns: new[] { "UserId", "UserGroupId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserGroups_ApiKey", + table: "UserGroups", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserGroups_Name", + table: "UserGroups", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserPins_ApiKey", + table: "UserPins", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserPins_UserId_PinId_PinType", + table: "UserPins", + columns: new[] { "UserId", "PinId", "PinType" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserPlaybackSettings_ApiKey", + table: "UserPlaybackSettings", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserPlaybackSettings_UserId", + table: "UserPlaybackSettings", + column: "UserId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserPodcastEpisodePlayHistories_PodcastEpisodeId_PlayedAt", + table: "UserPodcastEpisodePlayHistories", + columns: new[] { "PodcastEpisodeId", "PlayedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_UserPodcastEpisodePlayHistories_UserId_PodcastEpisodeId_Pla~", + table: "UserPodcastEpisodePlayHistories", + columns: new[] { "UserId", "PodcastEpisodeId", "PlayedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_Users_ApiKey", + table: "Users", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Users_Email", + table: "Users", + column: "Email", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Users_UserName", + table: "Users", + column: "UserName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserSocialLogins_ApiKey", + table: "UserSocialLogins", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserSocialLogins_Provider_Subject", + table: "UserSocialLogins", + columns: new[] { "Provider", "Subject" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserSocialLogins_UserId", + table: "UserSocialLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_IsNowPlaying", + table: "UserSongPlayHistories", + column: "IsNowPlaying"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_PlayedAt", + table: "UserSongPlayHistories", + column: "PlayedAt"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_SongId", + table: "UserSongPlayHistories", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_SongId_PlayedAt", + table: "UserSongPlayHistories", + columns: new[] { "SongId", "PlayedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_UserId", + table: "UserSongPlayHistories", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongPlayHistories_UserId_PlayedAt", + table: "UserSongPlayHistories", + columns: new[] { "UserId", "PlayedAt" }); + + migrationBuilder.CreateIndex( + name: "IX_UserSongs_ApiKey", + table: "UserSongs", + column: "ApiKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserSongs_SongId", + table: "UserSongs", + column: "SongId"); + + migrationBuilder.CreateIndex( + name: "IX_UserSongs_UserId_SongId", + table: "UserSongs", + columns: new[] { "UserId", "SongId" }, + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ArtistRelation"); + + migrationBuilder.DropTable( + name: "Bookmarks"); + + migrationBuilder.DropTable( + name: "ChartItems"); + + migrationBuilder.DropTable( + name: "Contributors"); + + migrationBuilder.DropTable( + name: "JellyfinAccessTokens"); + + migrationBuilder.DropTable( + name: "JobHistories"); + + migrationBuilder.DropTable( + name: "LibraryAccessControls"); + + migrationBuilder.DropTable( + name: "LibraryScanHistories"); + + migrationBuilder.DropTable( + name: "PartyAuditEvents"); + + migrationBuilder.DropTable( + name: "PartyPlaybackStates"); + + migrationBuilder.DropTable( + name: "PartySessionParticipants"); + + migrationBuilder.DropTable( + name: "PlaylistSong"); + + migrationBuilder.DropTable( + name: "PlaylistUploadedFileItems"); + + migrationBuilder.DropTable( + name: "PlayQues"); + + migrationBuilder.DropTable( + name: "PodcastEpisodeBookmarks"); + + migrationBuilder.DropTable( + name: "RadioStations"); + + migrationBuilder.DropTable( + name: "RefreshTokens"); + + migrationBuilder.DropTable( + name: "RequestComments"); + + migrationBuilder.DropTable( + name: "RequestParticipants"); + + migrationBuilder.DropTable( + name: "RequestUserStates"); + + migrationBuilder.DropTable( + name: "SearchHistories"); + + migrationBuilder.DropTable( + name: "Settings"); + + migrationBuilder.DropTable( + name: "ShareActivities"); + + migrationBuilder.DropTable( + name: "Shares"); + + migrationBuilder.DropTable( + name: "SmartPlaylists"); + + migrationBuilder.DropTable( + name: "UserAlbums"); + + migrationBuilder.DropTable( + name: "UserArtists"); + + migrationBuilder.DropTable( + name: "UserDeviceProfiles"); + + migrationBuilder.DropTable( + name: "UserEqualizerPresets"); + + migrationBuilder.DropTable( + name: "UserGroupMembers"); + + migrationBuilder.DropTable( + name: "UserPins"); + + migrationBuilder.DropTable( + name: "UserPlaybackSettings"); + + migrationBuilder.DropTable( + name: "UserPodcastEpisodePlayHistories"); + + migrationBuilder.DropTable( + name: "UserSocialLogins"); + + migrationBuilder.DropTable( + name: "UserSongPlayHistories"); + + migrationBuilder.DropTable( + name: "UserSongs"); + + migrationBuilder.DropTable( + name: "Charts"); + + migrationBuilder.DropTable( + name: "PartyQueueItems"); + + migrationBuilder.DropTable( + name: "PlaylistUploadedFiles"); + + migrationBuilder.DropTable( + name: "Requests"); + + migrationBuilder.DropTable( + name: "Players"); + + migrationBuilder.DropTable( + name: "UserGroups"); + + migrationBuilder.DropTable( + name: "PodcastEpisodes"); + + migrationBuilder.DropTable( + name: "PartySessions"); + + migrationBuilder.DropTable( + name: "Playlists"); + + migrationBuilder.DropTable( + name: "PodcastChannels"); + + migrationBuilder.DropTable( + name: "PartySessionEndpoints"); + + migrationBuilder.DropTable( + name: "Songs"); + + migrationBuilder.DropTable( + name: "Users"); + + migrationBuilder.DropTable( + name: "Albums"); + + migrationBuilder.DropTable( + name: "Artists"); + + migrationBuilder.DropTable( + name: "Libraries"); + } + } +} diff --git a/src/Melodee.Common/Migrations/MelodeeDbContextModelSnapshot.cs b/src/Melodee.Common/Migrations/MelodeeDbContextModelSnapshot.cs index b0466a456..511d6aeb0 100644 --- a/src/Melodee.Common/Migrations/MelodeeDbContextModelSnapshot.cs +++ b/src/Melodee.Common/Migrations/MelodeeDbContextModelSnapshot.cs @@ -18,7 +18,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("ProductVersion", "10.0.8") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -51,7 +51,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("integer"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("Comment") .HasMaxLength(4000) @@ -214,7 +215,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("character varying(62000)"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); @@ -414,7 +416,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("Comment") .HasMaxLength(1000) @@ -603,7 +606,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone"); b.Property("LinkConfidence") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("LinkNotes") .HasMaxLength(1000) @@ -3313,7 +3317,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) Id = 905, ApiKey = new Guid("798d3376-ff64-b590-f204-c46bef35339a"), Category = 9, - Comment = "Storage path to hold MusicBrainz downloaded files and SQLite db.", + Comment = "Storage path to hold MusicBrainz downloaded files and database.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.storagePath", @@ -3337,7 +3341,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) Id = 907, ApiKey = new Guid("fb35de56-6659-1268-9f28-97e0be7d870c"), Category = 9, - Comment = "Number of records to import from MusicBrainz downloaded db dump before commiting to local SQLite database.", + Comment = "Number of records to import from MusicBrainz downloaded db dump before committing to local database.", CreatedAt = NodaTime.Instant.FromUnixTimeTicks(0L), IsLocked = false, Key = "searchEngine.musicbrainz.importBatchSize", @@ -4704,7 +4708,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("integer"); b.Property("CalculatedRating") - .HasColumnType("numeric"); + .HasPrecision(18, 6) + .HasColumnType("numeric(18,6)"); b.Property("ChannelCount") .HasColumnType("integer"); diff --git a/src/Melodee.Common/Models/Extensions/AlbumExtensions.cs b/src/Melodee.Common/Models/Extensions/AlbumExtensions.cs index 50b2891cb..0ce4d6a37 100644 --- a/src/Melodee.Common/Models/Extensions/AlbumExtensions.cs +++ b/src/Melodee.Common/Models/Extensions/AlbumExtensions.cs @@ -12,7 +12,6 @@ using Melodee.Common.Plugins.MetaData.Directory; using Melodee.Common.Plugins.Validation; using Melodee.Common.Utility; -using Image = SixLabors.ImageSharp.Image; namespace Melodee.Common.Models.Extensions; @@ -687,7 +686,7 @@ public static bool RenumberImages(this Album album, CancellationToken cancellati } public static async Task> FindImages(this Album album, - IAlbumNamesInDirectoryPlugin albumNamesInDirectoryPlugin, int duplicateThreshold, ImageConvertor imageConvertor, + IImageProcessor imageProcessor, IAlbumNamesInDirectoryPlugin albumNamesInDirectoryPlugin, int duplicateThreshold, ImageConvertor imageConvertor, IImageValidator imageValidator, bool doDeleteInvalid, CancellationToken cancellationToken = default) { var imageInfos = new List(); @@ -747,7 +746,7 @@ await imageConvertor.ProcessFileAsync(fileInfo.Directory!.ToDirectorySystemInfo( pictureIdentifier = PictureIdentifier.SecondaryFront; } - var imageInfo = await Image.LoadAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); + var imageDimensions = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); var fileInfoFileSystemInfo = fileInfo.ToFileSystemInfo(); var crc32 = Crc32.Calculate(fileInfo); @@ -772,9 +771,9 @@ await imageConvertor.ProcessFileAsync(fileInfo.Directory!.ToDirectorySystemInfo( DirectoryInfo = isSameDirectory ? null : fileFileSystemDirectoryInfo, OriginalFilename = fileInfo.Name, PictureIdentifier = pictureIdentifier, - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = index + (int)pictureIdentifier * 1000 + imageInfo.Width + imageInfo.Height + Width = imageDimensions?.Width ?? 0, + Height = imageDimensions?.Height ?? 0, + SortOrder = index + (int)pictureIdentifier * 1000 + (imageDimensions?.Width ?? 0) + (imageDimensions?.Height ?? 0) }); index++; } @@ -826,7 +825,7 @@ firstSecondaryImage with if (imageFullname != null) { var imageBytes = await File.ReadAllBytesAsync(imageFullname, cancellationToken).ConfigureAwait(false); - if (seenImageBytes.Any(x => ImageHasher.Similarity(x, imageBytes) > duplicateThreshold)) + if (seenImageBytes.Any(x => imageProcessor.Similarity(x, imageBytes) > duplicateThreshold)) { Trace.WriteLine( $"Album find images is skipping duplicate image [{imageInfo.FileInfo?.Name}] with crc32 [{imageInfo.CrcHash}]"); @@ -852,6 +851,7 @@ firstSecondaryImage with /// an album directory in the 'artist' directory. /// public static async Task> FindArtistImages(this Album album, + IImageProcessor imageProcessor, ImageConvertor imageConvertor, IImageValidator imageValidator, bool doDeleteOriginal, @@ -936,7 +936,7 @@ await imageConvertor pictureIdentifier = PictureIdentifier.BandSecondary; } - var imageInfo = await Image.LoadAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); + var imageDimensions = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); var fileInfoFileSystemInfo = fileInfo.ToFileSystemInfo(); var crc32 = Crc32.Calculate(fileInfo); @@ -958,8 +958,8 @@ await imageConvertor }, OriginalFilename = fileInfo.Name, PictureIdentifier = pictureIdentifier, - Width = imageInfo.Width, - Height = imageInfo.Height, + Width = imageDimensions?.Width ?? 0, + Height = imageDimensions?.Height ?? 0, SortOrder = index }); index++; diff --git a/src/Melodee.Common/Plugins/Conversion/Image/ImageConvertor.cs b/src/Melodee.Common/Plugins/Conversion/Image/ImageConvertor.cs index 4fd68b70c..492ba704b 100644 --- a/src/Melodee.Common/Plugins/Conversion/Image/ImageConvertor.cs +++ b/src/Melodee.Common/Plugins/Conversion/Image/ImageConvertor.cs @@ -2,22 +2,18 @@ using Melodee.Common.Configuration; using Melodee.Common.Constants; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.MetaData; using Melodee.Common.Utility; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Formats.Jpeg; -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; -using ImageInfo = SixLabors.ImageSharp.ImageInfo; namespace Melodee.Common.Plugins.Conversion.Image; /// /// This converts non-JPG image into a JPG image. /// -public sealed class ImageConvertor(IMelodeeConfiguration configuration) : MetaDataBase(configuration), IConversionPlugin +public sealed class ImageConvertor(IImageProcessor imageProcessor, IMelodeeConfiguration configuration) : MetaDataBase(configuration), IConversionPlugin { public override string Id => "8A169045-C650-4DE5-A564-F0E2D28EF07D"; @@ -61,10 +57,10 @@ public async Task> ProcessFileAsync(FileSyst var newName = Path.ChangeExtension(fileInfo.FullName, "jpg"); - ImageInfo? imageInfo = null; + ImageDimensions? imageDimensions = null; try { - imageInfo = await SixLabors.ImageSharp.Image.IdentifyAsync(fileInfo.FullName, cancellationToken) + imageDimensions = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken) .ConfigureAwait(false); } catch (Exception e) @@ -81,16 +77,29 @@ public async Task> ProcessFileAsync(FileSyst }; } + if (imageDimensions == null) + { + Trace.WriteLine($"Deleting unidentifiable image file [{fileInfo.FullName}]"); + fileInfo.Delete(); + return new OperationResult + { + Errors = + [ + new Exception($"Deleting unidentifiable image file [{fileInfo.FullName}]") + ], + Data = fileSystemInfo + }; + } - var larger = imageInfo.Width; + var larger = imageDimensions.Width; if (larger < smallImageSize) { larger = smallImageSize; } - if (larger < imageInfo.Height) + if (larger < imageDimensions.Height) { - larger = imageInfo.Height; + larger = imageDimensions.Height; } var resizeWithPaddingSize = smallImageSize; @@ -106,15 +115,17 @@ public async Task> ProcessFileAsync(FileSyst var didModify = false; var imageBytes = await File.ReadAllBytesAsync(fileInfo.FullName, cancellationToken); - if (imageInfo.Metadata.DecodedImageFormat != JpegFormat.Instance) + var decodedFormat = imageDimensions.Format; + if (!string.Equals(decodedFormat, "Jpeg", StringComparison.OrdinalIgnoreCase) && + !string.Equals(decodedFormat, "Jpeg", StringComparison.OrdinalIgnoreCase)) { - imageBytes = ConvertToJpegFormatViaSixLabors(imageBytes); + imageBytes = imageProcessor.ConvertToJpeg(imageBytes); didModify = true; } - if (imageInfo.Width != imageInfo.Height || imageInfo.Height > largeImageSize) + if (imageDimensions.Width != imageDimensions.Height || imageDimensions.Height > largeImageSize) { - imageBytes = ResizeAndPadToBeSquare(imageBytes, resizeWithPaddingSize); + imageBytes = imageProcessor.ResizeAndPadToSquare(imageBytes, resizeWithPaddingSize); didModify = true; } @@ -140,77 +151,15 @@ public async Task> ProcessFileAsync(FileSyst }; } - private static byte[] ResizeAndPadToBeSquare(ReadOnlySpan imageBytes, int width) - { - if (imageBytes.Length == 0) - { - return imageBytes.ToArray(); - } - - using var outStream = new MemoryStream(); - using (var image = SixLabors.ImageSharp.Image.Load(imageBytes)) - { - image.Mutate(x => - x.Resize(new ResizeOptions - { - Size = new Size(width, width), - Mode = ResizeMode.Pad - }).BackgroundColor(new Rgba32(255, 255, 255, 0))); - image.SaveAsJpeg(outStream); - } - - return outStream.ToArray(); - } - - public static byte[] ResizeImageIfNeeded(ReadOnlySpan imageBytes, int maxWidth, int maxHeight, + public byte[] ResizeImageIfNeeded(ReadOnlyMemory imageBytes, int maxWidth, int maxHeight, bool isForUserAvatar) { - if (imageBytes.Length == 0) - { - return imageBytes.ToArray(); - } - - using var outStream = new MemoryStream(); - using (var image = SixLabors.ImageSharp.Image.Load(imageBytes)) - { - if (image.Width > maxWidth || image.Height > maxHeight) - { - image.Mutate(x => x.Resize(maxWidth, maxHeight)); - } - - if (isForUserAvatar) - { - image.SaveAsGif(outStream); - } - else - { - image.SaveAsJpeg(outStream); - } - } - - return outStream.ToArray(); - } - - private static byte[] ConvertToJpegFormatViaSixLabors(ReadOnlySpan imageBytes) - { - using var outStream = new MemoryStream(); - using (var image = SixLabors.ImageSharp.Image.Load(imageBytes)) - { - image.SaveAsJpeg(outStream); - } - - return outStream.ToArray(); + return imageProcessor.ResizeImageIfNeeded(imageBytes, maxWidth, maxHeight, isForUserAvatar); } - public static async Task ConvertToGifFormat(byte[] imageBytes, + public async Task ConvertToGifFormat(byte[] imageBytes, CancellationToken cancellationToken = default) { - using var outStream = new MemoryStream(); - using (var image = SixLabors.ImageSharp.Image.Load(imageBytes)) - { - await image.SaveAsGifAsync(outStream, cancellationToken); - } - - return outStream.ToArray(); + return await imageProcessor.ConvertToGifAsync(imageBytes, cancellationToken).ConfigureAwait(false); } } diff --git a/src/Melodee.Common/Plugins/Extensions/FileSystemDirectoryInfoExtensions.cs b/src/Melodee.Common/Plugins/Extensions/FileSystemDirectoryInfoExtensions.cs index 3cd3f3bfa..365ad7820 100644 --- a/src/Melodee.Common/Plugins/Extensions/FileSystemDirectoryInfoExtensions.cs +++ b/src/Melodee.Common/Plugins/Extensions/FileSystemDirectoryInfoExtensions.cs @@ -1,10 +1,10 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Validation; using Melodee.Common.Utility; -using SixLabors.ImageSharp; using ImageInfo = Melodee.Common.Models.ImageInfo; namespace Melodee.Common.Plugins.Extensions; @@ -12,6 +12,7 @@ namespace Melodee.Common.Plugins.Extensions; public static class FileSystemDirectoryInfoExtensions { public static async Task ImagesForTypeAsync(this FileSystemDirectoryInfo directory, + IImageProcessor imageProcessor, int maxNumberOfImagesAllowed, PictureIdentifier[] forPictureIdentifiers, IImageValidator imageValidator, CancellationToken cancellationToken = default) { @@ -51,7 +52,7 @@ public static async Task ImagesForTypeAsync(this FileSystemDirector if (forPictureIdentifiers.Contains(pictureIdentifier)) { - var imageInfo = await Image.LoadAsync(fileInfo.FullName, cancellationToken); + var imageDimensions = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); var fileInfoFileSystemInfo = fileInfo.ToFileSystemInfo(); imageInfos.Add(new ImageInfo { @@ -65,8 +66,8 @@ public static async Task ImagesForTypeAsync(this FileSystemDirector }, OriginalFilename = fileInfo.Name, PictureIdentifier = pictureIdentifier, - Width = imageInfo.Width, - Height = imageInfo.Height, + Width = imageDimensions?.Width ?? 0, + Height = imageDimensions?.Height ?? 0, SortOrder = index }); index++; diff --git a/src/Melodee.Common/Plugins/MetaData/Song/AtlMetaTag.cs b/src/Melodee.Common/Plugins/MetaData/Song/AtlMetaTag.cs index 9d8bbb513..75cc1446b 100644 --- a/src/Melodee.Common/Plugins/MetaData/Song/AtlMetaTag.cs +++ b/src/Melodee.Common/Plugins/MetaData/Song/AtlMetaTag.cs @@ -5,6 +5,7 @@ using Melodee.Common.Constants; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; @@ -17,7 +18,6 @@ using Serilog; using Serilog.Events; using SerilogTimings; -using SixLabors.ImageSharp; using ImageInfo = Melodee.Common.Models.ImageInfo; namespace Melodee.Common.Plugins.MetaData.Song; @@ -28,6 +28,7 @@ namespace Melodee.Common.Plugins.MetaData.Song; /// public sealed class AtlMetaTag( IMetaTagsProcessorPlugin metaTagsProcessorPlugin, + IImageProcessor imageProcessor, ImageConvertor imageConverter, IImageValidator imageValidator, IMelodeeConfiguration configuration) : MetaDataBase(configuration), @@ -354,7 +355,7 @@ public override bool DoesHandleFile(FileSystemDirectoryInfo directoryInfo, FileS continue; } - var imageInfo = Image.Load(embeddedPicture.PictureData); + var embeddedPictureDimensions = imageProcessor.Identify(embeddedPicture.PictureData); var imageCrcHash = Crc32.Calculate(embeddedPicture.PictureData); if (directoryInfo.GetFileForCrcHash("jpg", imageCrcHash) == null) { @@ -365,9 +366,9 @@ public override bool DoesHandleFile(FileSystemDirectoryInfo directoryInfo, FileS $"{ImageInfo.ImageFilePrefix}{(pictureIndex + 1).ToStringPadLeft(Common.Configuration.MelodeeConfiguration.ImageNameNumberPadding)}-{embeddedPicture.PicType.ToString()}.jpg"); if (File.Exists(newImageFileName)) { - var embeddedPictureDataInfo = Image.Identify(embeddedPicture.PictureData); + var embeddedPictureDataInfo = imageProcessor.Identify(embeddedPicture.PictureData); var exitingImageInfo = - await Image.IdentifyAsync(newImageFileName, cancellationToken); + await imageProcessor.IdentifyAsync(newImageFileName, cancellationToken).ConfigureAwait(false); doSaveEmbeddedImage = embeddedPictureDataInfo?.Width > exitingImageInfo?.Width; } @@ -389,8 +390,8 @@ await File.WriteAllBytesAsync(newImageFileName, embeddedPicture.PictureData, CrcHash = imageCrcHash, PictureIdentifier = pictureIdentifier, FileInfo = new FileInfo(newImageFileName).ToFileSystemInfo(), - Width = imageInfo.Width, - Height = imageInfo.Height, + Width = embeddedPictureDimensions?.Width ?? 0, + Height = embeddedPictureDimensions?.Height ?? 0, SortOrder = embeddedPicture.Position, WasEmbeddedInSong = true }); diff --git a/src/Melodee.Common/Plugins/SearchEngine/MusicBrainz/Data/DecentDBMusicBrainzRepository.cs b/src/Melodee.Common/Plugins/SearchEngine/MusicBrainz/Data/DecentDBMusicBrainzRepository.cs index 562a896e1..202f84702 100644 --- a/src/Melodee.Common/Plugins/SearchEngine/MusicBrainz/Data/DecentDBMusicBrainzRepository.cs +++ b/src/Melodee.Common/Plugins/SearchEngine/MusicBrainz/Data/DecentDBMusicBrainzRepository.cs @@ -96,8 +96,6 @@ public async Task> SearchArtist( { await using var context = await dbContextFactory.CreateDbContextAsync(cancellationToken); - await MusicBrainzSchemaInitializer.EnsureArtistAliasTableAsync(context, cancellationToken); - Artist[] foundArtists = []; var mbIdRaw = query.MusicBrainzIdValue?.ToString(); diff --git a/src/Melodee.Common/Plugins/Validation/ImageValidator.cs b/src/Melodee.Common/Plugins/Validation/ImageValidator.cs index b733b0f90..aa23345c5 100644 --- a/src/Melodee.Common/Plugins/Validation/ImageValidator.cs +++ b/src/Melodee.Common/Plugins/Validation/ImageValidator.cs @@ -3,14 +3,14 @@ using Melodee.Common.Constants; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Validation; using Melodee.Common.Plugins.Validation.Models; -using SixLabors.ImageSharp; namespace Melodee.Common.Plugins.Validation; -public sealed class ImageValidator(IMelodeeConfiguration configuration) : IImageValidator +public sealed class ImageValidator(IImageProcessor imageProcessor, IMelodeeConfiguration configuration) : IImageValidator { private static readonly Regex ImageNameIsProofRegex = new(@"(proof|foto)+", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); @@ -50,31 +50,42 @@ public async Task> ValidateImage(FileInfo? fil try { - var imageInfo = await Image.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); - if (pictureIdentifier.ValidateIsSquare()) + var imageInfo = await imageProcessor.IdentifyAsync(fileInfo.FullName, cancellationToken).ConfigureAwait(false); + if (imageInfo == null) { - if (imageInfo.Width != imageInfo.Height) + _validationMessages.Add(new ValidationResultMessage { - _validationMessages.Add(new ValidationResultMessage + Severity = ValidationResultMessageSeverity.Critical, + Message = "Unable to identify image format." + }); + } + else + { + if (pictureIdentifier.ValidateIsSquare()) + { + if (imageInfo.Width != imageInfo.Height) { - Severity = ValidationResultMessageSeverity.Critical, - Message = $"Image is not square [{imageInfo.Width}x{imageInfo.Height}]." - }); + _validationMessages.Add(new ValidationResultMessage + { + Severity = ValidationResultMessageSeverity.Critical, + Message = $"Image is not square [{imageInfo.Width}x{imageInfo.Height}]." + }); + } } - } - var minSize = configuration.GetValue(SettingRegistry.ImagingMinimumImageSize); - var smallImageSize = configuration.GetValue(SettingRegistry.ImagingSmallSize); - if (minSize > 0 && minSize >= smallImageSize) - { - if (imageInfo.Width < minSize) + var minSize = configuration.GetValue(SettingRegistry.ImagingMinimumImageSize); + var smallImageSize = configuration.GetValue(SettingRegistry.ImagingSmallSize); + if (minSize > 0 && minSize >= smallImageSize) { - _validationMessages.Add(new ValidationResultMessage + if (imageInfo.Width < minSize) { - Severity = ValidationResultMessageSeverity.Critical, - Message = - $"Image size [{imageInfo.Width}] is less than configured minimum image size [{minSize}]." - }); + _validationMessages.Add(new ValidationResultMessage + { + Severity = ValidationResultMessageSeverity.Critical, + Message = + $"Image size [{imageInfo.Width}] is less than configured minimum image size [{minSize}]." + }); + } } } } diff --git a/src/Melodee.Common/Services/AlbumService.cs b/src/Melodee.Common/Services/AlbumService.cs index 781e6d9db..b4b575fe2 100644 --- a/src/Melodee.Common/Services/AlbumService.cs +++ b/src/Melodee.Common/Services/AlbumService.cs @@ -9,6 +9,7 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; using Melodee.Common.Filtering; +using Melodee.Common.Imaging; using Melodee.Common.MessageBus.Events; using Melodee.Common.Models.Collection; using Melodee.Common.Models.Extensions; @@ -39,7 +40,8 @@ public class AlbumService( ISerializer serializer, IHttpClientFactory httpClientFactory, MediaEditService mediaEditService, - IFileSystemService fileSystemService) + IFileSystemService fileSystemService, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { private const string CacheKeyDetailByApiKeyTemplate = "urn:album:apikey:{0}"; @@ -363,10 +365,16 @@ public void ClearCache(Album album) await using (var scopedContext = await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false)) { + var albums = await scopedContext + .Albums.Include(x => x.Artist).ThenInclude(x => x.Library) + .Where(x => albumIds.Contains(x.Id)) + .ToListAsync(cancellationToken) + .ConfigureAwait(false); + + var foundIds = albums.Select(a => a.Id).ToHashSet(); foreach (var albumId in albumIds) { - var artist = await GetAsync(albumId, cancellationToken).ConfigureAwait(false); - if (!artist.IsSuccess) + if (!foundIds.Contains(albumId)) { return new MelodeeModels.OperationResult("Unknown album") { @@ -375,13 +383,8 @@ await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(fals } } - foreach (var albuMid in albumIds) + foreach (var album in albums) { - var album = await scopedContext - .Albums.Include(x => x.Artist).ThenInclude(x => x.Library) - .FirstAsync(x => x.Id == albuMid, cancellationToken) - .ConfigureAwait(false); - if (deleteFiles) { var albumDirectory = Path.Combine(album.Artist.Library.Path, album.Artist.Directory, album.Directory); @@ -930,7 +933,7 @@ await UpdateLibraryAggregateStatsByIdAsync(album.Artist.LibraryId, cancellationT if (targetSize > 0) { - imageBytes = ImageConvertor.ResizeImageIfNeeded(imageBytes, targetSize, targetSize, false); + imageBytes = imageProcessor.ResizeImageIfNeeded(imageBytes, targetSize, targetSize, false); eTag = HashHelper.CreateSha256(eTag + targetSize); } resizeStopwatch.Stop(); @@ -997,7 +1000,7 @@ private async Task SaveImageBytesAsAlbumImageAsync( CancellationToken cancellationToken = default) { var configuration = await configurationFactory.GetConfigurationAsync(cancellationToken); - var imageConvertor = new ImageConvertor(configuration); + var imageConvertor = new ImageConvertor(imageProcessor, configuration); var albumPath = album.ToFileSystemDirectoryInfo(); var albumImages = albumPath.FileInfosForExtension("jpg", false).ToArray(); diff --git a/src/Melodee.Common/Services/ArtistService.cs b/src/Melodee.Common/Services/ArtistService.cs index c0840cc66..227b09c0e 100644 --- a/src/Melodee.Common/Services/ArtistService.cs +++ b/src/Melodee.Common/Services/ArtistService.cs @@ -9,6 +9,7 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; using Melodee.Common.Filtering; +using Melodee.Common.Imaging; using Melodee.Common.MessageBus.Events; using Melodee.Common.Models.Collection; using Melodee.Common.Models.Extensions; @@ -33,6 +34,7 @@ public class ArtistService( IDbContextFactory contextFactory, ISerializer serializer, IHttpClientFactory httpClientFactory, + IImageProcessor imageProcessor, AlbumService albumService, IBus bus, IFileSystemService fileSystemService) @@ -530,10 +532,16 @@ await bus.SendLocal(new ArtistRescanEvent(artistResult.Data.Id, await using (var scopedContext = await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false)) { + var artists = await scopedContext + .Artists.Include(x => x.Library) + .Where(x => artistIds.Contains(x.Id)) + .ToListAsync(cancellationToken) + .ConfigureAwait(false); + + var foundIds = artists.Select(a => a.Id).ToHashSet(); foreach (var artistId in artistIds) { - var artist = await GetAsync(artistId, cancellationToken).ConfigureAwait(false); - if (!artist.IsSuccess) + if (!foundIds.Contains(artistId)) { return new MelodeeModels.OperationResult("Unknown artist.") { @@ -542,13 +550,14 @@ await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(fals } } - foreach (var artistId in artistIds) - { - var artist = await scopedContext - .Artists.Include(x => x.Library) - .FirstAsync(x => x.Id == artistId, cancellationToken) - .ConfigureAwait(false); + var contributorIds = artists.Select(a => a.Id).ToList(); + var allContributors = await scopedContext.Contributors + .Where(x => x.ArtistId.HasValue && contributorIds.Contains(x.ArtistId.Value)) + .ToListAsync(cancellationToken) + .ConfigureAwait(false); + foreach (var artist in artists) + { if (deleteFiles) { var artistDirectory = Path.Combine(artist.Library.Path, artist.Directory); @@ -558,14 +567,10 @@ await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(fals } } - var artistContributors = await scopedContext.Contributors.Where(x => x.ArtistId == artistId) - .ToListAsync(cancellationToken).ConfigureAwait(false); - if (artistContributors.Count > 0) + var artistContributors = allContributors.Where(x => x.ArtistId == artist.Id); + foreach (var contributor in artistContributors) { - foreach (var artistContributor in artistContributors) - { - scopedContext.Contributors.Remove(artistContributor); - } + scopedContext.Contributors.Remove(contributor); } scopedContext.Artists.Remove(artist); @@ -755,7 +760,7 @@ private async Task SaveImageBytesAsArtistImageAsync( CancellationToken cancellationToken = default) { var configuration = await configurationFactory.GetConfigurationAsync(cancellationToken); - var imageConvertor = new ImageConvertor(configuration); + var imageConvertor = new ImageConvertor(imageProcessor, configuration); var artistDirectory = artist.ToFileSystemDirectoryInfo(); var artistImages = artistDirectory.FileInfosForExtension("jpg", false).ToArray(); if (deleteAllImages && artistImages.Length != 0) @@ -1055,7 +1060,7 @@ await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(fals cancellationToken).ConfigureAwait(false); if (album != null) { - await ProcessExistingDirectoryMoveMergeAsync(configuration, serializer, album, + await ProcessExistingDirectoryMoveMergeAsync(configuration, serializer, imageProcessor, album, existingAlbumDirectory, cancellationToken).ConfigureAwait(false); } } @@ -1101,7 +1106,7 @@ await ProcessExistingDirectoryMoveMergeAsync(configuration, serializer, album, cancellationToken).ConfigureAwait(false); if (album != null) { - await ProcessExistingDirectoryMoveMergeAsync(configuration, serializer, album, + await ProcessExistingDirectoryMoveMergeAsync(configuration, serializer, imageProcessor, album, albumToMergeDirectory2, cancellationToken).ConfigureAwait(false); } } @@ -2298,7 +2303,7 @@ private void MergeMetadata( if (targetSize > 0) { - imageBytes = ImageConvertor.ResizeImageIfNeeded(imageBytes, targetSize, targetSize, false); + imageBytes = imageProcessor.ResizeImageIfNeeded(imageBytes, targetSize, targetSize, false); eTag = HashHelper.CreateSha256(eTag + targetSize); } resizeStopwatch.Stop(); diff --git a/src/Melodee.Common/Services/ChartService.cs b/src/Melodee.Common/Services/ChartService.cs index aad31028e..73a52018f 100644 --- a/src/Melodee.Common/Services/ChartService.cs +++ b/src/Melodee.Common/Services/ChartService.cs @@ -4,8 +4,8 @@ using Melodee.Common.Data.Models.Extensions; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; -using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Services.Caching; using Microsoft.EntityFrameworkCore; using NodaTime; @@ -18,7 +18,8 @@ public sealed class ChartService( ILogger logger, ICacheManager cacheManager, IDbContextFactory contextFactory, - LibraryService libraryService) + LibraryService libraryService, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { private const string CacheKeyDetailBySlugTemplate = "urn:chart:slug:{0}"; @@ -1013,7 +1014,7 @@ public async Task> UploadChartImageAsync( var chartImageFilename = chart.ToImageFileName(chartLibrary.Data.Path); - var gifImageBytes = await ImageConvertor.ConvertToGifFormat(imageBytes, cancellationToken).ConfigureAwait(false); + var gifImageBytes = await imageProcessor.ConvertToGifAsync(imageBytes, cancellationToken).ConfigureAwait(false); await File.WriteAllBytesAsync(chartImageFilename, gifImageBytes, cancellationToken).ConfigureAwait(false); chart.LastUpdatedAt = Instant.FromDateTimeUtc(DateTime.UtcNow); diff --git a/src/Melodee.Common/Services/ImageConversionService.cs b/src/Melodee.Common/Services/ImageConversionService.cs index b642e03ff..8082496ad 100644 --- a/src/Melodee.Common/Services/ImageConversionService.cs +++ b/src/Melodee.Common/Services/ImageConversionService.cs @@ -1,5 +1,6 @@ using Melodee.Common.Configuration; using Melodee.Common.Data; +using Melodee.Common.Imaging; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Services.Caching; @@ -13,7 +14,8 @@ public class ImageConversionService( ILogger logger, ICacheManager cacheManager, IDbContextFactory contextFactory, - IMelodeeConfigurationFactory configurationFactory + IMelodeeConfigurationFactory configurationFactory, + IImageProcessor imageProcessor ) : ServiceBase(logger, cacheManager, contextFactory) { @@ -31,7 +33,7 @@ IMelodeeConfigurationFactory configurationFactory }; } - var imageConvertor = new ImageConvertor(configuration); + var imageConvertor = new ImageConvertor(imageProcessor, configuration); var convertResult = await imageConvertor.ProcessFileAsync(imageFileInfo.ToDirectorySystemInfo(), imageFileInfo.ToFileSystemInfo(), cancellationToken); return new MelodeeModels.OperationResult diff --git a/src/Melodee.Common/Services/LibraryService.cs b/src/Melodee.Common/Services/LibraryService.cs index 67a2feb98..3c2a0cd6b 100644 --- a/src/Melodee.Common/Services/LibraryService.cs +++ b/src/Melodee.Common/Services/LibraryService.cs @@ -12,6 +12,7 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; using Melodee.Common.Filtering; +using Melodee.Common.Imaging; using Melodee.Common.Metadata; using Melodee.Common.Models.Collection; using Melodee.Common.Models.Extensions; @@ -41,6 +42,7 @@ public class LibraryService : ServiceBase private const int DisplayNumberPadLength = 8; private readonly IMelodeeConfigurationFactory _configurationFactory; + private readonly IImageProcessor _imageProcessor; private readonly MelodeeMetadataMaker _melodeeMetadataMaker; private readonly ISerializer _serializer; @@ -56,9 +58,11 @@ public LibraryService(ILogger logger, IDbContextFactory contextFactory, IMelodeeConfigurationFactory configurationFactory, ISerializer serializer, + IImageProcessor imageProcessor, MelodeeMetadataMaker melodeeMetadataMaker) : base(logger, cacheManager, contextFactory) { _configurationFactory = configurationFactory; + _imageProcessor = imageProcessor; _serializer = serializer; _melodeeMetadataMaker = melodeeMetadataMaker; } @@ -523,6 +527,7 @@ await Parallel.ForEachAsync(albums, parallelOptions, async (album, ct) => { await ProcessExistingDirectoryMoveMergeAsync(configuration, _serializer, + _imageProcessor, album, libraryAlbumPath, ct) @@ -1449,6 +1454,7 @@ await Parallel.ForEachAsync(albums, parallelOptions, async (album, ct) => { await ProcessExistingDirectoryMoveMergeAsync(configuration, _serializer, + _imageProcessor, album, targetAlbumPath, ct) diff --git a/src/Melodee.Common/Services/OpenSubsonicApiService.cs b/src/Melodee.Common/Services/OpenSubsonicApiService.cs index 30d055d7f..e9f5f50d1 100644 --- a/src/Melodee.Common/Services/OpenSubsonicApiService.cs +++ b/src/Melodee.Common/Services/OpenSubsonicApiService.cs @@ -7,6 +7,7 @@ using Melodee.Common.Data.Models.Extensions; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.MessageBus.Events; using Melodee.Common.Models; using Melodee.Common.Models.Collection; @@ -17,7 +18,6 @@ using Melodee.Common.Models.OpenSubsonic.Responses; using Melodee.Common.Models.OpenSubsonic.Searching; using Melodee.Common.Models.Streaming; -using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Plugins.MetaData.Song; using Melodee.Common.Services.Caching; using Melodee.Common.Services.Extensions; @@ -70,7 +70,8 @@ public class OpenSubsonicApiService( ILyricPlugin lyricPlugin, PodcastPlaybackService podcastPlaybackService, UserRatingService userRatingService, - UserBookmarkService userBookmarkService) + UserBookmarkService userBookmarkService, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { @@ -1499,7 +1500,7 @@ public async Task GetImageForApiKeyId( var sizeParsedToInt = SafeParser.ToNumber(size); if (sizeParsedToInt > 0) { - result = ImageConvertor.ResizeImageIfNeeded(result, + result = imageProcessor.ResizeImageIfNeeded(result, sizeParsedToInt, sizeParsedToInt, isUserImageRequest); eTag = HashHelper.CreateSha256(eTag + sizeParsedToInt); @@ -1510,7 +1511,7 @@ public async Task GetImageForApiKeyId( { case ImageSize.Thumbnail: var thumbnailSize = (await Configuration.Value).GetValue(SettingRegistry.ImagingThumbnailSize) ?? SafeParser.ToNumber(ImageSize.Thumbnail); - result = ImageConvertor.ResizeImageIfNeeded(result, + result = imageProcessor.ResizeImageIfNeeded(result, thumbnailSize, thumbnailSize, isUserImageRequest); @@ -1520,7 +1521,7 @@ public async Task GetImageForApiKeyId( case ImageSize.Small: var smallSize = (await Configuration.Value).GetValue(SettingRegistry.ImagingSmallSize) ?? throw new Exception($"Invalid configuration [{SettingRegistry.ImagingSmallSize}] not found."); - result = ImageConvertor.ResizeImageIfNeeded(result, + result = imageProcessor.ResizeImageIfNeeded(result, smallSize, smallSize, isUserImageRequest); @@ -1533,7 +1534,7 @@ public async Task GetImageForApiKeyId( SettingRegistry.ImagingMediumSize) ?? throw new Exception( $"Invalid configuration [{SettingRegistry.ImagingMediumSize}] not found."); - result = ImageConvertor.ResizeImageIfNeeded(result, + result = imageProcessor.ResizeImageIfNeeded(result, mediumSize, mediumSize, isUserImageRequest); diff --git a/src/Melodee.Common/Services/PlaylistService.cs b/src/Melodee.Common/Services/PlaylistService.cs index 0bacb0da5..c61c5fc05 100644 --- a/src/Melodee.Common/Services/PlaylistService.cs +++ b/src/Melodee.Common/Services/PlaylistService.cs @@ -6,10 +6,10 @@ using Melodee.Common.Data.Models; using Melodee.Common.Data.Models.Extensions; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Collection; using Melodee.Common.Models.Extensions; -using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Serialization; using Melodee.Common.Services.Caching; using Melodee.Common.Utility; @@ -27,7 +27,8 @@ public class PlaylistService( ISerializer serializer, IMelodeeConfigurationFactory configurationFactory, IDbContextFactory contextFactory, - LibraryService libraryService) + LibraryService libraryService, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { private const string CacheKeyDetailByApiKeyTemplate = "urn:playlist:apikey:{0}"; @@ -691,7 +692,7 @@ public async Task> UploadPlaylistImageAsync( var playlistImageFilename = playlist.ToImageFileName(playlistLibrary.Data.Path); // Convert to GIF format to support animations - var gifImageBytes = await ImageConvertor.ConvertToGifFormat(imageBytes, cancellationToken).ConfigureAwait(false); + var gifImageBytes = await imageProcessor.ConvertToGifAsync(imageBytes, cancellationToken).ConfigureAwait(false); await File.WriteAllBytesAsync(playlistImageFilename, gifImageBytes, cancellationToken).ConfigureAwait(false); playlist.LastUpdatedAt = Instant.FromDateTimeUtc(DateTime.UtcNow); diff --git a/src/Melodee.Common/Services/Scanning/DirectoryProcessorToStagingService.cs b/src/Melodee.Common/Services/Scanning/DirectoryProcessorToStagingService.cs index f4e9eb65d..2ef71caa6 100644 --- a/src/Melodee.Common/Services/Scanning/DirectoryProcessorToStagingService.cs +++ b/src/Melodee.Common/Services/Scanning/DirectoryProcessorToStagingService.cs @@ -5,6 +5,7 @@ using Melodee.Common.Data; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Models.Scripting; @@ -29,7 +30,6 @@ using Serilog; using Serilog.Events; using SerilogTimings; -using SixLabors.ImageSharp; using SmartFormat; using ImageInfo = Melodee.Common.Models.ImageInfo; @@ -52,7 +52,8 @@ public sealed class DirectoryProcessorToStagingService( IFileSystemService fileSystemService, IScriptOrchestrationService scriptOrchestrationService, IDirectoryContextProvider directoryContextProvider, - DenyActionHandlerFactory denyActionHandlerFactory) + DenyActionHandlerFactory denyActionHandlerFactory, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory), IDisposable { private readonly SemaphoreSlim _processingThrottle = new(Environment.ProcessorCount); @@ -73,8 +74,8 @@ public sealed class DirectoryProcessorToStagingService( private string _directoryStaging = null!; private int _duplicateThreshold; - private ImageConvertor _imageConvertor = new(new MelodeeConfiguration([])); - private IImageValidator _imageValidator = new ImageValidator(new MelodeeConfiguration([])); + private ImageConvertor _imageConvertor = null!; + private IImageValidator _imageValidator = null!; private bool _initialized; private int _maxAlbumProcessingCount; @@ -120,20 +121,20 @@ public async Task InitializeAsync(IMelodeeConfiguration? configuration, string? _directoryStaging = stagingPathOverride ?? (await libraryService.GetStagingLibraryAsync(token).ConfigureAwait(false)).Data.Path; _albumValidator = new AlbumValidator(_configuration); - _imageValidator = new ImageValidator(_configuration); - _imageConvertor = new ImageConvertor(_configuration); + _imageValidator = new ImageValidator(imageProcessor, _configuration); + _imageConvertor = new ImageConvertor(imageProcessor, _configuration); _songPlugins = [ - new AtlMetaTag(new MetaTagsProcessor(_configuration, serializer), _imageConvertor, _imageValidator, + new AtlMetaTag(new MetaTagsProcessor(_configuration, serializer), imageProcessor, _imageConvertor, _imageValidator, _configuration), new IdSharpMetaTag(new MetaTagsProcessor(_configuration, serializer), _configuration) ]; _albumNamesInDirectoryPlugin = new AtlMetaTag(new MetaTagsProcessor(_configuration, serializer), - _imageConvertor, _imageValidator, _configuration); + imageProcessor, _imageConvertor, _imageValidator, _configuration); _conversionPlugins = [ - new ImageConvertor(_configuration), + new ImageConvertor(imageProcessor, _configuration), new MediaConvertor(_configuration) ]; @@ -766,7 +767,7 @@ await plugin.ProcessDirectoryAsync(directoryInfoToProcess, cancellationToken) try { - album.Images = (await album.FindImages(_albumNamesInDirectoryPlugin, _duplicateThreshold, + album.Images = (await album.FindImages(imageProcessor, _albumNamesInDirectoryPlugin, _duplicateThreshold, _imageConvertor, _imageValidator, _configuration.GetValue(SettingRegistry.ProcessingDoDeleteOriginal), cancellationToken).ConfigureAwait(false)).ToArray(); @@ -774,7 +775,7 @@ await plugin.ProcessDirectoryAsync(directoryInfoToProcess, cancellationToken) album.Artist = new Artist(album.Artist.Name, album.Artist.NameNormalized, album.Artist.SortName, - (await album.FindArtistImages(_imageConvertor, + (await album.FindArtistImages(imageProcessor, _imageConvertor, _imageValidator, _configuration.GetValue(SettingRegistry.ProcessingDoDeleteOriginal), _configuration.GetValue(SettingRegistry.ProcessingDoDeleteOriginal), @@ -1063,24 +1064,27 @@ await songPlugin cancellationToken).ConfigureAwait(false)) { var newImageInfo = new FileInfo(albumImageFromSearchFileName); - var imageInfo = await Image + var imageInfo = await imageProcessor .IdentifyAsync(albumImageFromSearchFileName, cancellationToken) .ConfigureAwait(false); - album.Images = new List + if (imageInfo != null) { - new() + album.Images = new List { - FileInfo = newImageInfo.ToFileSystemInfo(), - PictureIdentifier = PictureIdentifier.Front, - CrcHash = Crc32.Calculate(newImageInfo), - Width = imageInfo.Width, - Height = imageInfo.Height, - SortOrder = 1, - WasEmbeddedInSong = false - } - }; - LogAndRaiseEvent(LogEventLevel.Debug, - $"[{nameof(DirectoryProcessorToStagingService)}] Downloaded album image [{imageSearchResult.MediaUrl}]"); + new() + { + FileInfo = newImageInfo.ToFileSystemInfo(), + PictureIdentifier = PictureIdentifier.Front, + CrcHash = Crc32.Calculate(newImageInfo), + Width = imageInfo.Width, + Height = imageInfo.Height, + SortOrder = 1, + WasEmbeddedInSong = false + } + }; + LogAndRaiseEvent(LogEventLevel.Debug, + $"[{nameof(DirectoryProcessorToStagingService)}] Downloaded album image [{imageSearchResult.MediaUrl}]"); + } } } else diff --git a/src/Melodee.Common/Services/Scanning/MediaEditService.cs b/src/Melodee.Common/Services/Scanning/MediaEditService.cs index cc479892d..fdd8fb025 100644 --- a/src/Melodee.Common/Services/Scanning/MediaEditService.cs +++ b/src/Melodee.Common/Services/Scanning/MediaEditService.cs @@ -3,6 +3,7 @@ using Melodee.Common.Data; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; @@ -18,7 +19,6 @@ using Serilog; using Serilog.Events; using SerilogTimings; -using SixLabors.ImageSharp; using Crc32 = Melodee.Common.Utility.Crc32; using ImageInfo = Melodee.Common.Models.ImageInfo; @@ -34,7 +34,8 @@ public sealed class MediaEditService( IMelodeeConfigurationFactory configurationFactory, AlbumDiscoveryService albumDiscoveryService, ISerializer serializer, - IHttpClientFactory httpClientFactory) : ServiceBase(logger, cacheManager, contextFactory) + IHttpClientFactory httpClientFactory, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { public const int SortOrderMediaMultiplier = 10000; @@ -42,17 +43,17 @@ public sealed class MediaEditService( private IMelodeeConfiguration _configuration = new MelodeeConfiguration([]); private ISongPlugin _editSongPlugin = new NullSongPlugin(); - private ImageConvertor _imageConvertor = new(new MelodeeConfiguration([])); - private IImageValidator _imageValidator = new ImageValidator(new MelodeeConfiguration([])); + private ImageConvertor _imageConvertor = null!; + private IImageValidator _imageValidator = null!; private bool _initialized; public async Task InitializeAsync(IMelodeeConfiguration? configuration = null, CancellationToken token = default) { _configuration = configuration ?? await configurationFactory.GetConfigurationAsync(token).ConfigureAwait(false); _albumValidator = new AlbumValidator(_configuration); - _imageValidator = new ImageValidator(_configuration); - _imageConvertor = new ImageConvertor(_configuration); - _editSongPlugin = new AtlMetaTag(new MetaTagsProcessor(_configuration, serializer), _imageConvertor, + _imageValidator = new ImageValidator(imageProcessor, _configuration); + _imageConvertor = new ImageConvertor(imageProcessor, _configuration); + _editSongPlugin = new AtlMetaTag(new MetaTagsProcessor(_configuration, serializer), imageProcessor, _imageConvertor, _imageValidator, _configuration); await albumDiscoveryService.InitializeAsync(configuration, token).ConfigureAwait(false); @@ -110,7 +111,7 @@ private void CheckInitialized() } } - var imageConvertor = new ImageConvertor(_configuration); + var imageConvertor = new ImageConvertor(imageProcessor, _configuration); var numberOfExistingFrontImages = album.Images?.Count(x => x.PictureIdentifier == PictureIdentifier.Front) ?? 0; var tempFilename = Path.Combine(album.Directory.FullName(), @@ -132,15 +133,15 @@ private void CheckInitialized() albumImages.RemoveAll(x => x == existingCoverImage); } - var imageInfo = Image.Load(imageBytes); + var imageDimensions = imageProcessor.Identify(imageBytes); albumImages.Add(new ImageInfo { CrcHash = Crc32.Calculate(imageFileInfo.ToFileInfo(directoryInfo)), FileInfo = imageFileInfo, - Height = imageInfo.Height, + Height = imageDimensions?.Height ?? 0, PictureIdentifier = PictureIdentifier.Front, SortOrder = deleteAllCoverImages ? 1 : albumImages.Max(x => x.SortOrder) + 1, - Width = imageInfo.Width + Width = imageDimensions?.Width ?? 0 }); album.Images = albumImages.ToArray(); } diff --git a/src/Melodee.Common/Services/ServiceBase.cs b/src/Melodee.Common/Services/ServiceBase.cs index eb1b3a786..0d7151d32 100644 --- a/src/Melodee.Common/Services/ServiceBase.cs +++ b/src/Melodee.Common/Services/ServiceBase.cs @@ -5,6 +5,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models.DTOs; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Models.OpenSubsonic; @@ -20,7 +21,6 @@ using Serilog; using Serilog.Events; using SerilogTimings; -using SixLabors.ImageSharp; using Artist = Melodee.Common.Models.Artist; using Directory = System.IO.Directory; @@ -56,6 +56,7 @@ protected ServiceBase( protected async Task ProcessExistingDirectoryMoveMergeAsync( IMelodeeConfiguration configuration, ISerializer serializer, + IImageProcessor imageProcessor, Album albumToMove, string existingAlbumPath, CancellationToken cancellationToken = default) @@ -119,12 +120,12 @@ protected async Task ProcessExistingDirectoryMoveMergeAsync( imagesToMoveCrc.Remove(imageToMove); // If some exist, not duplicate CRC, same name, keep the higher resolution - var existingInfoSizeInfo = await Image + var existingInfoSizeInfo = await imageProcessor .IdentifyAsync(existingWithSameFileName.ImageFileName, cancellationToken) .ConfigureAwait(false); - var toMoveInfoSizeInfo = await Image.IdentifyAsync(imageToMove.ImageFileName, cancellationToken) + var toMoveInfoSizeInfo = await imageProcessor.IdentifyAsync(imageToMove.ImageFileName, cancellationToken) .ConfigureAwait(false); - if (existingInfoSizeInfo.Width > toMoveInfoSizeInfo.Width) + if (existingInfoSizeInfo != null && toMoveInfoSizeInfo != null && existingInfoSizeInfo.Width > toMoveInfoSizeInfo.Width) { continue; } @@ -156,9 +157,9 @@ protected async Task ProcessExistingDirectoryMoveMergeAsync( var songsToMove = albumToMove.Songs?.ToList() ?? []; if (songsToMove.Any()) { - var imageValidator = new ImageValidator(configuration); - var imageConvertor = new ImageConvertor(configuration); - var atlMetTag = new AtlMetaTag(new MetaTagsProcessor(configuration, serializer), imageConvertor, + var imageValidator = new ImageValidator(imageProcessor, configuration); + var imageConvertor = new ImageConvertor(imageProcessor, configuration); + var atlMetTag = new AtlMetaTag(new MetaTagsProcessor(configuration, serializer), imageProcessor, imageConvertor, imageValidator, configuration); var existingSongsFileInfos = albumToMoveDir.AllMediaTypeFileInfos().ToArray(); var existingSongs = new List(); diff --git a/src/Melodee.Common/Services/SongService.cs b/src/Melodee.Common/Services/SongService.cs index 61baa15e1..e8af84a21 100644 --- a/src/Melodee.Common/Services/SongService.cs +++ b/src/Melodee.Common/Services/SongService.cs @@ -377,21 +377,25 @@ public async Task ClearCacheAsync(int songId, CancellationToken cancellationToke await using (var scopedContext = await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false)) { + var songs = await scopedContext.Songs + .Include(s => s.Album) + .ThenInclude(a => a.Artist) + .ThenInclude(ar => ar.Library) + .Where(s => songIds.Contains(s.Id)) + .ToListAsync(cancellationToken) + .ConfigureAwait(false); + + var foundIds = songs.Select(s => s.Id).ToHashSet(); foreach (var songId in songIds) { - var song = await scopedContext.Songs - .Include(s => s.Album) - .ThenInclude(a => a.Artist) - .ThenInclude(ar => ar.Library) - .FirstOrDefaultAsync(s => s.Id == songId, cancellationToken) - .ConfigureAwait(false); - - if (song == null) + if (!foundIds.Contains(songId)) { Logger.Warning("Song with Id [{SongId}] not found for deletion", songId); - continue; } + } + foreach (var song in songs) + { // Delete associated media file from disk if it exists var songFilePath = Path.Combine( song.Album.Artist.Library.Path, diff --git a/src/Melodee.Common/Services/UserProfileService.cs b/src/Melodee.Common/Services/UserProfileService.cs index 1c169ffa0..15ff812fb 100644 --- a/src/Melodee.Common/Services/UserProfileService.cs +++ b/src/Melodee.Common/Services/UserProfileService.cs @@ -9,8 +9,8 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; using Melodee.Common.Filtering; +using Melodee.Common.Imaging; using Melodee.Common.Models.Collection; -using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Services.Caching; using Melodee.Common.Services.Security; using Melodee.Common.Utility; @@ -41,7 +41,8 @@ public sealed class UserProfileService( PodcastService podcastService, IBus bus, IPasswordHashService passwordHashService, - ISecretProtector secretProtector) + ISecretProtector secretProtector, + IImageProcessor imageProcessor) : ServiceBase(logger, cacheManager, contextFactory) { private const string CacheKeyDetailByApiKeyTemplate = "urn:user:apikey:{0}"; @@ -524,7 +525,7 @@ await ContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(fals File.Delete(userAvatarFullname); } - imageBytes = await ImageConvertor.ConvertToGifFormat(imageBytes, cancellationToken).ConfigureAwait(false); + imageBytes = await imageProcessor.ConvertToGifAsync(imageBytes, cancellationToken).ConfigureAwait(false); await File.WriteAllBytesAsync(userAvatarFullname, imageBytes, cancellationToken).ConfigureAwait(false); diff --git a/src/Melodee.Mql/Melodee.Mql.csproj b/src/Melodee.Mql/Melodee.Mql.csproj index 12cfaf821..b9ae12a18 100644 --- a/src/Melodee.Mql/Melodee.Mql.csproj +++ b/src/Melodee.Mql/Melodee.Mql.csproj @@ -7,7 +7,7 @@ true $(NoWarn);NU1507 - 2.0.1 + 2.1.0 build$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) $(VersionPrefix).0 $(VersionPrefix).0 @@ -19,8 +19,6 @@ - - diff --git a/tests/Melodee.Tests.Common/Extensions/AlbumExtensionTests.cs b/tests/Melodee.Tests.Common/Extensions/AlbumExtensionTests.cs index c0c4a84a4..5090267ef 100644 --- a/tests/Melodee.Tests.Common/Extensions/AlbumExtensionTests.cs +++ b/tests/Melodee.Tests.Common/Extensions/AlbumExtensionTests.cs @@ -1,5 +1,6 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.MetaData.Song; @@ -212,7 +213,7 @@ public async Task ValidateFileIsForAlbum(string fileName, bool shouldBe) { var config = await MockConfigurationFactory().GetConfigurationAsync(); Assert.Equal(shouldBe, NewAlbum() - .IsFileForAlbum(new AtlMetaTag(new MetaTagsProcessor(config, Serializer), GetImageConvertor(), GetImageValidator(), config), + .IsFileForAlbum(new AtlMetaTag(new MetaTagsProcessor(config, Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), config), new FileInfo(fileName))); } } diff --git a/tests/Melodee.Tests.Common/Imaging/ImageHasherTests.cs b/tests/Melodee.Tests.Common/Imaging/ImageHasherTests.cs index ae9450f87..e18a9f6cc 100644 --- a/tests/Melodee.Tests.Common/Imaging/ImageHasherTests.cs +++ b/tests/Melodee.Tests.Common/Imaging/ImageHasherTests.cs @@ -1,57 +1,54 @@ using Melodee.Common.Imaging; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; +using SkiaSharp; namespace Melodee.Tests.Common.Imaging; public class ImageHasherTests { + private readonly IImageProcessor _imageProcessor = new ImageProcessor(); + private static byte[] CreateSolidColorImage(int width, int height, byte r, byte g, byte b) { - using var image = new Image(width, height); - var color = new Rgba32(r, g, b); - image.Mutate(ctx => ctx.BackgroundColor(color)); - - using var stream = new MemoryStream(); - image.SaveAsPng(stream); - return stream.ToArray(); + using var bitmap = new SKBitmap(width, height, SKColorType.Rgba8888, SKAlphaType.Premul); + bitmap.Erase(new SKColor(r, g, b)); + using var image = SKImage.FromBitmap(bitmap); + using var data = image.Encode(SKEncodedImageFormat.Png, 100); + if (data == null) return []; + return data.ToArray(); } private static byte[] CreateGradientImage(int width, int height) { - using var image = new Image(width, height); - + using var bitmap = new SKBitmap(width, height, SKColorType.Rgba8888, SKAlphaType.Premul); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { var brightness = (byte)(255 * y / height); - image[x, y] = new Rgba32(brightness, brightness, brightness); + bitmap.SetPixel(x, y, new SKColor(brightness, brightness, brightness)); } } - - using var stream = new MemoryStream(); - image.SaveAsPng(stream); - return stream.ToArray(); + using var image = SKImage.FromBitmap(bitmap); + using var data = image.Encode(SKEncodedImageFormat.Png, 100); + if (data == null) return []; + return data.ToArray(); } private static byte[] CreateCheckerboardImage(int width, int height, int squareSize) { - using var image = new Image(width, height); - + using var bitmap = new SKBitmap(width, height, SKColorType.Rgba8888, SKAlphaType.Premul); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { var isWhite = ((x / squareSize) + (y / squareSize)) % 2 == 0; - image[x, y] = isWhite ? new Rgba32(255, 255, 255) : new Rgba32(0, 0, 0); + bitmap.SetPixel(x, y, isWhite ? new SKColor(255, 255, 255) : new SKColor(0, 0, 0)); } } - - using var stream = new MemoryStream(); - image.SaveAsPng(stream); - return stream.ToArray(); + using var image = SKImage.FromBitmap(bitmap); + using var data = image.Encode(SKEncodedImageFormat.Png, 100); + if (data == null) return []; + return data.ToArray(); } [Fact] @@ -60,8 +57,8 @@ public void AverageHash_IdenticalImages_ProduceSameHash() var image1 = CreateSolidColorImage(100, 100, 128, 128, 128); var image2 = CreateSolidColorImage(100, 100, 128, 128, 128); - var hash1 = ImageHasher.AverageHash(image1); - var hash2 = ImageHasher.AverageHash(image2); + var hash1 = _imageProcessor.ComputeAverageHash(image1); + var hash2 = _imageProcessor.ComputeAverageHash(image2); Assert.Equal(hash1, hash2); } @@ -71,9 +68,9 @@ public void AverageHash_SameImage_ConsistentHash() { var image = CreateSolidColorImage(100, 100, 200, 150, 100); - var hash1 = ImageHasher.AverageHash(image); - var hash2 = ImageHasher.AverageHash(image); - var hash3 = ImageHasher.AverageHash(image); + var hash1 = _imageProcessor.ComputeAverageHash(image); + var hash2 = _imageProcessor.ComputeAverageHash(image); + var hash3 = _imageProcessor.ComputeAverageHash(image); Assert.Equal(hash1, hash2); Assert.Equal(hash2, hash3); @@ -85,8 +82,8 @@ public void AverageHash_DifferentSizes_SameContent_SameHash() var image1 = CreateSolidColorImage(50, 50, 100, 100, 100); var image2 = CreateSolidColorImage(200, 200, 100, 100, 100); - var hash1 = ImageHasher.AverageHash(image1); - var hash2 = ImageHasher.AverageHash(image2); + var hash1 = _imageProcessor.ComputeAverageHash(image1); + var hash2 = _imageProcessor.ComputeAverageHash(image2); Assert.Equal(hash1, hash2); } @@ -99,9 +96,9 @@ public void AverageHash_SolidColorImages_ProduceSameHash() var whiteImage = CreateSolidColorImage(100, 100, 255, 255, 255); var grayImage = CreateSolidColorImage(100, 100, 128, 128, 128); - var hashBlack = ImageHasher.AverageHash(blackImage); - var hashWhite = ImageHasher.AverageHash(whiteImage); - var hashGray = ImageHasher.AverageHash(grayImage); + var hashBlack = _imageProcessor.ComputeAverageHash(blackImage); + var hashWhite = _imageProcessor.ComputeAverageHash(whiteImage); + var hashGray = _imageProcessor.ComputeAverageHash(grayImage); // All solid colors produce max value (all bits set) Assert.Equal(ulong.MaxValue, hashBlack); @@ -115,8 +112,8 @@ public void AverageHash_GradientImage_ProducesConsistentHash() var gradient1 = CreateGradientImage(100, 100); var gradient2 = CreateGradientImage(100, 100); - var hash1 = ImageHasher.AverageHash(gradient1); - var hash2 = ImageHasher.AverageHash(gradient2); + var hash1 = _imageProcessor.ComputeAverageHash(gradient1); + var hash2 = _imageProcessor.ComputeAverageHash(gradient2); Assert.Equal(hash1, hash2); } @@ -126,7 +123,7 @@ public void Similarity_IdenticalHashes_Returns100Percent() { var hash = 0x123456789ABCDEF0UL; - var similarity = ImageHasher.Similarity(hash, hash); + var similarity = _imageProcessor.Similarity(hash, hash); Assert.Equal(100.0, similarity); } @@ -137,7 +134,7 @@ public void Similarity_CompletelyDifferentHashes_ReturnsLowPercentage() var hash1 = 0x0000000000000000UL; var hash2 = 0xFFFFFFFFFFFFFFFFUL; - var similarity = ImageHasher.Similarity(hash1, hash2); + var similarity = _imageProcessor.Similarity(hash1, hash2); Assert.Equal(0.0, similarity); } @@ -148,7 +145,7 @@ public void Similarity_OnebitDifference_ReturnsHighPercentage() var hash1 = 0x0000000000000000UL; var hash2 = 0x0000000000000001UL; - var similarity = ImageHasher.Similarity(hash1, hash2); + var similarity = _imageProcessor.Similarity(hash1, hash2); var expectedSimilarity = (64.0 - 1.0) * 100.0 / 64.0; Assert.Equal(expectedSimilarity, similarity, 2); @@ -160,7 +157,7 @@ public void Similarity_IdenticalImages_Returns100Percent() var image1 = CreateSolidColorImage(100, 100, 128, 64, 192); var image2 = CreateSolidColorImage(100, 100, 128, 64, 192); - var similarity = ImageHasher.Similarity(image1, image2); + var similarity = _imageProcessor.Similarity(image1, image2); Assert.Equal(100.0, similarity); } @@ -171,7 +168,7 @@ public void Similarity_SlightlyDifferentColors_ReturnsHighSimilarity() var image1 = CreateSolidColorImage(100, 100, 128, 128, 128); var image2 = CreateSolidColorImage(100, 100, 130, 130, 130); - var similarity = ImageHasher.Similarity(image1, image2); + var similarity = _imageProcessor.Similarity(image1, image2); Assert.True(similarity > 90.0); } @@ -183,7 +180,7 @@ public void Similarity_SolidColorImages_Returns100Percent() var black = CreateSolidColorImage(100, 100, 0, 0, 0); var white = CreateSolidColorImage(100, 100, 255, 255, 255); - var similarity = ImageHasher.Similarity(black, white); + var similarity = _imageProcessor.Similarity(black, white); Assert.Equal(100.0, similarity); } @@ -194,7 +191,7 @@ public void ImagesAreSame_IdenticalImages_ReturnsTrue() var image1 = CreateSolidColorImage(100, 100, 100, 150, 200); var image2 = CreateSolidColorImage(100, 100, 100, 150, 200); - var areSame = ImageHasher.ImagesAreSame(image1, image2); + var areSame = _imageProcessor.ImagesAreSame(image1, image2); Assert.True(areSame); } @@ -206,7 +203,7 @@ public void ImagesAreSame_SolidColors_ReturnsTrue() var image1 = CreateSolidColorImage(100, 100, 100, 100, 100); var image2 = CreateSolidColorImage(100, 100, 200, 200, 200); - var areSame = ImageHasher.ImagesAreSame(image1, image2); + var areSame = _imageProcessor.ImagesAreSame(image1, image2); Assert.True(areSame); } @@ -217,8 +214,8 @@ public void AverageHash_CheckerboardPattern_ProducesConsistentHash() var checker1 = CreateCheckerboardImage(64, 64, 8); var checker2 = CreateCheckerboardImage(64, 64, 8); - var hash1 = ImageHasher.AverageHash(checker1); - var hash2 = ImageHasher.AverageHash(checker2); + var hash1 = _imageProcessor.ComputeAverageHash(checker1); + var hash2 = _imageProcessor.ComputeAverageHash(checker2); Assert.Equal(hash1, hash2); } @@ -229,8 +226,8 @@ public void AverageHash_DifferentCheckerboardSizes_DifferentHashes() var checker1 = CreateCheckerboardImage(64, 64, 4); var checker2 = CreateCheckerboardImage(64, 64, 16); - var hash1 = ImageHasher.AverageHash(checker1); - var hash2 = ImageHasher.AverageHash(checker2); + var hash1 = _imageProcessor.ComputeAverageHash(checker1); + var hash2 = _imageProcessor.ComputeAverageHash(checker2); Assert.NotEqual(hash1, hash2); } @@ -246,8 +243,8 @@ public void AverageHash_VariousColors_ProducesStableHashes(byte r, byte g, byte { var image = CreateSolidColorImage(100, 100, r, g, b); - var hash1 = ImageHasher.AverageHash(image); - var hash2 = ImageHasher.AverageHash(image); + var hash1 = _imageProcessor.ComputeAverageHash(image); + var hash2 = _imageProcessor.ComputeAverageHash(image); Assert.Equal(hash1, hash2); } @@ -258,7 +255,7 @@ public void Similarity_SimilarGradients_ReturnsHighSimilarity() var gradient1 = CreateGradientImage(100, 100); var gradient2 = CreateGradientImage(100, 100); - var similarity = ImageHasher.Similarity(gradient1, gradient2); + var similarity = _imageProcessor.Similarity(gradient1, gradient2); Assert.Equal(100.0, similarity); } @@ -273,8 +270,8 @@ public void AverageHash_VariousSizes_SameColor_ProducesSameHash(int width, int h var image1 = CreateSolidColorImage(width, height, 128, 128, 128); var image2 = CreateSolidColorImage(100, 100, 128, 128, 128); - var hash1 = ImageHasher.AverageHash(image1); - var hash2 = ImageHasher.AverageHash(image2); + var hash1 = _imageProcessor.ComputeAverageHash(image1); + var hash2 = _imageProcessor.ComputeAverageHash(image2); Assert.Equal(hash1, hash2); } @@ -284,7 +281,7 @@ public void AverageHash_VerySmallImage_WorksCorrectly() { var image = CreateSolidColorImage(8, 8, 100, 100, 100); - var hash = ImageHasher.AverageHash(image); + var hash = _imageProcessor.ComputeAverageHash(image); Assert.NotEqual(0UL, hash); } @@ -295,7 +292,7 @@ public void Similarity_ReturnValueBetweenZeroAnd100() var image1 = CreateSolidColorImage(100, 100, 50, 100, 150); var image2 = CreateSolidColorImage(100, 100, 200, 150, 100); - var similarity = ImageHasher.Similarity(image1, image2); + var similarity = _imageProcessor.Similarity(image1, image2); Assert.InRange(similarity, 0.0, 100.0); } diff --git a/tests/Melodee.Tests.Common/Plugins/Conversion/ImageConversionTests.cs b/tests/Melodee.Tests.Common/Plugins/Conversion/ImageConversionTests.cs index fcac68de8..ed5bac37a 100644 --- a/tests/Melodee.Tests.Common/Plugins/Conversion/ImageConversionTests.cs +++ b/tests/Melodee.Tests.Common/Plugins/Conversion/ImageConversionTests.cs @@ -1,4 +1,5 @@ using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.Conversion.Image; @@ -14,7 +15,7 @@ public async Task ValidateConvertingPngToJpgAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -37,7 +38,7 @@ public async Task ValidateConvertingGifToJpgAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -60,7 +61,7 @@ public async Task ValidateConvertingTiffToJpgAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -83,7 +84,7 @@ public async Task ValidateConvertingWebpJpgAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -106,7 +107,7 @@ public async Task ValidateConvertingBitmapJpgAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -129,7 +130,7 @@ public async Task ValidateConvertingNonImageFailsAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var convertor = new ImageConvertor(TestsBase.NewPluginsConfiguration()); + var convertor = new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); var convertorResult = await convertor.ProcessFileAsync(new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", diff --git a/tests/Melodee.Tests.Common/Plugins/MetaData/CUETests.cs b/tests/Melodee.Tests.Common/Plugins/MetaData/CUETests.cs index e5a38e3d9..76b584d4c 100644 --- a/tests/Melodee.Tests.Common/Plugins/MetaData/CUETests.cs +++ b/tests/Melodee.Tests.Common/Plugins/MetaData/CUETests.cs @@ -1,3 +1,4 @@ +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Plugins.MetaData.Song; using Melodee.Common.Plugins.Processor; @@ -37,7 +38,7 @@ public async Task ValidateCueSheetFileAsync() var cueSheet = new CueSheet( Serializer, [ - new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) + new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) ], GetAlbumValidator(), NewPluginsConfiguration()); var sfvResult = await cueSheet.ProcessDirectoryAsync(new FileSystemDirectoryInfo diff --git a/tests/Melodee.Tests.Common/Plugins/MetaData/M3UTests.cs b/tests/Melodee.Tests.Common/Plugins/MetaData/M3UTests.cs index 40f980466..7b96360b8 100644 --- a/tests/Melodee.Tests.Common/Plugins/MetaData/M3UTests.cs +++ b/tests/Melodee.Tests.Common/Plugins/MetaData/M3UTests.cs @@ -1,3 +1,4 @@ +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Plugins.MetaData.Directory; using Melodee.Common.Plugins.MetaData.Directory.Models; @@ -16,7 +17,7 @@ public async Task ValidateM3UFileAsync() if (fileInfo.Exists) { var m3U = new M3UPlaylist(Serializer, [ - new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) + new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) ], GetAlbumValidator(), NewPluginsConfiguration()); diff --git a/tests/Melodee.Tests.Common/Plugins/MetaData/MetaTagTests.cs b/tests/Melodee.Tests.Common/Plugins/MetaData/MetaTagTests.cs index 2215c3ec9..edc807a8b 100644 --- a/tests/Melodee.Tests.Common/Plugins/MetaData/MetaTagTests.cs +++ b/tests/Melodee.Tests.Common/Plugins/MetaData/MetaTagTests.cs @@ -1,5 +1,6 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Models.Extensions; using Melodee.Common.Plugins.MetaData.Song; @@ -18,7 +19,7 @@ public async Task ValidateLoadingTagsForSimpleMp3FileAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -53,7 +54,7 @@ public async Task ValidateLoadingTagsForSimpleMp3FileAsync2() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -101,7 +102,7 @@ public async Task ValidateLoadingEditingAndSavingTagsForSimpleMp3FileAsync() var fileInfo = new FileInfo(testFile); if (fileInfo.Exists) { - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var dirInfo = new FileSystemDirectoryInfo { Path = @"/melodee_test/tests/", @@ -159,7 +160,7 @@ public async Task ValidateLoadingTagsForMp3FileAsync() Path = @"/melodee_test/tests/", Name = "tests" }; - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var tagResult = await metaTag.ProcessFileAsync(dirInfo, fileInfo.ToFileSystemInfo()); Assert.NotNull(tagResult); Assert.True(tagResult.IsSuccess); @@ -188,7 +189,7 @@ public async Task ValidateLoadingTagsForMp3Test4FileAsync() Path = @"/melodee_test/tests/", Name = "tests" }; - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var tagResult = await metaTag.ProcessFileAsync(dirInfo, fileInfo.ToFileSystemInfo()); Assert.NotNull(tagResult); Assert.True(tagResult.IsSuccess); @@ -216,7 +217,7 @@ public async Task ValidateMultipleSongArtistForMp3Async() Path = @"/melodee_test/tests/", Name = "tests" }; - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var tagResult = await metaTag.ProcessFileAsync(dirInfo, fileInfo.ToFileSystemInfo()); Assert.NotNull(tagResult); Assert.True(tagResult.IsSuccess); @@ -245,7 +246,7 @@ public async Task ValidateSongWithSelfTitledArtristAsync() Path = @"/melodee_test/tests/", Name = "tests" }; - var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + var metaTag = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); var tagResult = await metaTag.ProcessFileAsync(dirInfo, fileInfo.ToFileSystemInfo()); Assert.NotNull(tagResult); Assert.True(tagResult.IsSuccess); diff --git a/tests/Melodee.Tests.Common/Plugins/MetaData/SimpleFileVerificationTests.cs b/tests/Melodee.Tests.Common/Plugins/MetaData/SimpleFileVerificationTests.cs index 3c9f2e69b..1286ddad6 100644 --- a/tests/Melodee.Tests.Common/Plugins/MetaData/SimpleFileVerificationTests.cs +++ b/tests/Melodee.Tests.Common/Plugins/MetaData/SimpleFileVerificationTests.cs @@ -1,3 +1,4 @@ +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Plugins.MetaData.Directory.Models; using Melodee.Common.Plugins.MetaData.Song; @@ -18,7 +19,7 @@ public async Task ValidateSfvFileAsync() { var sfv = new SimpleFileVerification(Serializer, [ - new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) + new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) ], new AlbumValidator(NewPluginsConfiguration()), NewPluginsConfiguration()); var sfvResult = await sfv.ProcessDirectoryAsync(new FileSystemDirectoryInfo @@ -40,7 +41,7 @@ public async Task ValidateSfvFile2Async() { var sfv = new SimpleFileVerification(Serializer, [ - new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) + new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) ], new AlbumValidator(NewPluginsConfiguration()), NewPluginsConfiguration()); var sfvResult = await sfv.ProcessDirectoryAsync(new FileSystemDirectoryInfo { @@ -62,7 +63,7 @@ public async Task ValidateSfvFile3Async() { var sfv = new SimpleFileVerification(Serializer, [ - new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) + new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()) ], new AlbumValidator(NewPluginsConfiguration()), NewPluginsConfiguration()); var sfvResult = await sfv.ProcessDirectoryAsync(new FileSystemDirectoryInfo diff --git a/tests/Melodee.Tests.Common/Plugins/MetaData/Song/AtlMetaTagMetaTagsForTagDictionaryTests.cs b/tests/Melodee.Tests.Common/Plugins/MetaData/Song/AtlMetaTagMetaTagsForTagDictionaryTests.cs index d6326bcc5..c5dbccdbe 100644 --- a/tests/Melodee.Tests.Common/Plugins/MetaData/Song/AtlMetaTagMetaTagsForTagDictionaryTests.cs +++ b/tests/Melodee.Tests.Common/Plugins/MetaData/Song/AtlMetaTagMetaTagsForTagDictionaryTests.cs @@ -1,4 +1,5 @@ using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Plugins.MetaData.Song; using Melodee.Common.Plugins.Processor; @@ -11,7 +12,7 @@ public class AtlMetaTagMetaTagsForTagDictionaryTests : TestsBase public AtlMetaTagMetaTagsForTagDictionaryTests() { - _plugin = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); + _plugin = new AtlMetaTag(new MetaTagsProcessor(NewPluginsConfiguration(), Serializer), new ImageProcessor(), GetImageConvertor(), GetImageValidator(), NewPluginsConfiguration()); } private IEnumerable> CallMetaTagsForTagDictionary(Dictionary tagsDictionary) diff --git a/tests/Melodee.Tests.Common/Services/ChartServiceTests.cs b/tests/Melodee.Tests.Common/Services/ChartServiceTests.cs index 903239ed4..7ce98885c 100644 --- a/tests/Melodee.Tests.Common/Services/ChartServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/ChartServiceTests.cs @@ -1,5 +1,6 @@ using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Services; using NodaTime; @@ -14,7 +15,7 @@ public class ChartServiceTests : ServiceTestBase { private new ChartService GetChartService() { - return new ChartService(Logger, CacheManager, MockFactory(), GetLibraryService()); + return new ChartService(Logger, CacheManager, MockFactory(), GetLibraryService(), new ImageProcessor()); } private async Task CreateTestArtistAsync(string name) diff --git a/tests/Melodee.Tests.Common/Services/Doctor/DoctorServiceTests.cs b/tests/Melodee.Tests.Common/Services/Doctor/DoctorServiceTests.cs index 3b74ee0ac..7fab6234b 100644 --- a/tests/Melodee.Tests.Common/Services/Doctor/DoctorServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/Doctor/DoctorServiceTests.cs @@ -4,6 +4,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Services; using Melodee.Common.Services.Caching; using Melodee.Common.Services.Doctor; @@ -56,6 +57,7 @@ private LibraryService CreateLibraryService() _contextFactory, _configFactoryMock.Object, null!, + new ImageProcessor(), null!); } diff --git a/tests/Melodee.Tests.Common/Services/ImageConversionServiceTests.cs b/tests/Melodee.Tests.Common/Services/ImageConversionServiceTests.cs index f926206fe..2b759d76c 100644 --- a/tests/Melodee.Tests.Common/Services/ImageConversionServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/ImageConversionServiceTests.cs @@ -1,4 +1,5 @@ using Melodee.Common.Configuration; +using Melodee.Common.Imaging; using Melodee.Common.Services; using Moq; @@ -18,29 +19,8 @@ public async Task ConvertImageAsync_WithNullConfiguration_ReturnsError() Logger, CacheManager, MockFactory(), - mockConfigFactory.Object); - - var imageFileInfo = new FileInfo(Path.Combine(Path.GetTempPath(), "test.jpg")); - - // Act - var result = await service.ConvertImageAsync(imageFileInfo, CancellationToken.None); - - // Assert - Assert.NotNull(result); - Assert.False(result.IsSuccess); - Assert.False(result.Data); - Assert.Contains("Configuration is not available", result.Messages?.FirstOrDefault() ?? string.Empty); - } - - [Fact] - public async Task ConvertImageAsync_WithNonExistentFile_ReturnsResult() - { - // Arrange - var service = new ImageConversionService( - Logger, - CacheManager, - MockFactory(), - MockConfigurationFactory()); + MockConfigurationFactory(), + new ImageProcessor()); var nonExistentFile = new FileInfo(Path.Combine(Path.GetTempPath(), $"nonexistent_{Guid.NewGuid()}.jpg")); @@ -61,7 +41,8 @@ public async Task ConvertImageAsync_WithInvalidImageFile_ReturnsError() Logger, CacheManager, MockFactory(), - MockConfigurationFactory()); + MockConfigurationFactory(), + new ImageProcessor()); // Create a temporary invalid image file (just text content) var tempFile = Path.Combine(Path.GetTempPath(), $"invalid_image_{Guid.NewGuid()}.jpg"); diff --git a/tests/Melodee.Tests.Common/Services/LibraryServiceTests.cs b/tests/Melodee.Tests.Common/Services/LibraryServiceTests.cs index f944d5a42..2f8c9964b 100644 --- a/tests/Melodee.Tests.Common/Services/LibraryServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/LibraryServiceTests.cs @@ -2,6 +2,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Services; using Microsoft.EntityFrameworkCore; @@ -1717,6 +1718,7 @@ private LibraryService GetLibraryService(IMelodeeConfigurationFactory configFact MockFactory(), configFactory, Serializer, + new ImageProcessor(), GetMelodeeMetadataMaker() ); } diff --git a/tests/Melodee.Tests.Common/Services/MediaEditServiceTests.cs b/tests/Melodee.Tests.Common/Services/MediaEditServiceTests.cs index 0ff6a494b..4aa18566e 100644 --- a/tests/Melodee.Tests.Common/Services/MediaEditServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/MediaEditServiceTests.cs @@ -1,6 +1,7 @@ using Melodee.Common.Configuration; using Melodee.Common.Constants; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Serialization; using Melodee.Common.Services.Scanning; @@ -390,7 +391,8 @@ public async Task ManuallyValidateAlbum_WithValidAlbum_ReturnsSuccess() MockConfigurationFactory(), GetTestAlbumDiscoveryService(), mockSerializer.Object, - mockHttpClientFactory.Object); + mockHttpClientFactory.Object, + new ImageProcessor()); } private Album CreateTestAlbum() diff --git a/tests/Melodee.Tests.Common/Services/PathValidationTests.cs b/tests/Melodee.Tests.Common/Services/PathValidationTests.cs index 5d4661a87..b29f1165d 100644 --- a/tests/Melodee.Tests.Common/Services/PathValidationTests.cs +++ b/tests/Melodee.Tests.Common/Services/PathValidationTests.cs @@ -3,6 +3,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Services; using Melodee.Common.Services.Caching; @@ -56,6 +57,7 @@ private LibraryService CreateLibraryService() CreateContextFactory(), _configFactoryMock.Object, null!, + new ImageProcessor(), null!); } diff --git a/tests/Melodee.Tests.Common/Services/Scanning/DirectoryProcessorToStagingServiceTests.cs b/tests/Melodee.Tests.Common/Services/Scanning/DirectoryProcessorToStagingServiceTests.cs index 9bba30520..a7ccac622 100644 --- a/tests/Melodee.Tests.Common/Services/Scanning/DirectoryProcessorToStagingServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/Scanning/DirectoryProcessorToStagingServiceTests.cs @@ -1,5 +1,6 @@ using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Services; using Melodee.Common.Services.Scanning; @@ -29,7 +30,8 @@ private DirectoryProcessorToStagingService GetDirectoryProcessorService() MockFileSystemService(), MockScriptOrchestrationService(), MockDirectoryContextProvider(), - MockDenyActionHandlerFactory()); + MockDenyActionHandlerFactory(), + new ImageProcessor()); } private DirectoryProcessorToStagingService GetDirectoryProcessorService(IFileSystemService fileSystemService) @@ -48,7 +50,8 @@ private DirectoryProcessorToStagingService GetDirectoryProcessorService(IFileSys fileSystemService, MockScriptOrchestrationService(), MockDirectoryContextProvider(), - MockDenyActionHandlerFactory()); + MockDenyActionHandlerFactory(), + new ImageProcessor()); } private async Task CreateStagingLibraryInDb() diff --git a/tests/Melodee.Tests.Common/Services/ServiceTestBase.cs b/tests/Melodee.Tests.Common/Services/ServiceTestBase.cs index 22bc3e750..b6a1c7df1 100644 --- a/tests/Melodee.Tests.Common/Services/ServiceTestBase.cs +++ b/tests/Melodee.Tests.Common/Services/ServiceTestBase.cs @@ -4,6 +4,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Metadata; using Melodee.Common.Models; using Melodee.Common.Models.OpenSubsonic.Requests; @@ -137,7 +138,8 @@ protected MediaEditService GetMediaEditService() MockConfigurationFactory(), GetAlbumDiscoveryService(), Serializer, - MockHttpClientFactory()); + MockHttpClientFactory(), + new ImageProcessor()); } protected IDbContextFactory MockFactory() @@ -218,12 +220,12 @@ protected ArtistSearchEngineService GetArtistSearchEngineService() protected ImageConvertor GetImageConvertor() { - return new ImageConvertor(TestsBase.NewPluginsConfiguration()); + return new ImageConvertor(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); } protected IImageValidator GetImageValidator() { - return new ImageValidator(TestsBase.NewPluginsConfiguration()); + return new ImageValidator(new ImageProcessor(), TestsBase.NewPluginsConfiguration()); } protected IAlbumValidator GetAlbumValidator() @@ -280,7 +282,8 @@ protected OpenSubsonicApiService GetOpenSubsonicApiService() GetLyricPlugin(), GetPodcastPlaybackService(), GetUserRatingService(), - GetUserBookmarkService()); + GetUserBookmarkService(), + new ImageProcessor()); } protected ISchedulerFactory CreateMockSchedulerFactory() @@ -304,6 +307,7 @@ protected ArtistService GetArtistService() MockFactory(), Serializer, MockHttpClientFactory(), + new ImageProcessor(), GetAlbumService(), MockBus(), MockFileSystemService()); @@ -319,7 +323,8 @@ protected AlbumService GetAlbumService() Serializer, MockHttpClientFactory(), GetMediaEditService(), - MockFileSystemService()); + MockFileSystemService(), + new ImageProcessor()); } protected StatisticsService GetStatisticsService() @@ -377,12 +382,12 @@ protected PodcastHttpClient MockPodcastHttpClient() protected PlaylistService GetPlaylistService() { - return new PlaylistService(Logger, CacheManager, Serializer, MockConfigurationFactory(), MockFactory(), GetLibraryService()); + return new PlaylistService(Logger, CacheManager, Serializer, MockConfigurationFactory(), MockFactory(), GetLibraryService(), new ImageProcessor()); } protected ChartService GetChartService() { - return new ChartService(Logger, CacheManager, MockFactory(), GetLibraryService()); + return new ChartService(Logger, CacheManager, MockFactory(), GetLibraryService(), new ImageProcessor()); } protected INowPlayingRepository GetNowPlayingRepository() @@ -399,6 +404,7 @@ protected LibraryService GetLibraryService() MockFactory(), MockConfigurationFactory(), Serializer, + new ImageProcessor(), GetMelodeeMetadataMaker() ); } @@ -413,7 +419,8 @@ protected MelodeeMetadataMaker GetMelodeeMetadataMaker() GetArtistSearchEngineService(), GetAlbumImageSearchEngineService(), MockHttpClientFactory(), - GetMediaEditService()); + GetMediaEditService(), + new ImageProcessor()); } protected ScrobbleService GetScrobbleService() @@ -498,7 +505,8 @@ protected UserProfileService GetUserProfileService() GetPodcastService(), MockBus(), MockPasswordHashService(), - MockSecretProtector()); + MockSecretProtector(), + new ImageProcessor()); } protected UserAuthenticationService GetUserAuthenticationService() diff --git a/tests/Melodee.Tests.Common/Services/Setup/SetupCheckServiceTests.cs b/tests/Melodee.Tests.Common/Services/Setup/SetupCheckServiceTests.cs index 11904d29c..2e445b61b 100644 --- a/tests/Melodee.Tests.Common/Services/Setup/SetupCheckServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/Setup/SetupCheckServiceTests.cs @@ -4,6 +4,7 @@ using Melodee.Common.Data; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Services; using Melodee.Common.Services.Caching; using Melodee.Common.Services.Setup; @@ -150,6 +151,7 @@ private LibraryService CreateLibraryService(IMelodeeConfigurationFactory configu CreateContextFactory(), configurationFactory, null!, + new ImageProcessor(), null!); } diff --git a/tests/Melodee.Tests.Common/Services/UserServicePasswordResetTests.cs b/tests/Melodee.Tests.Common/Services/UserServicePasswordResetTests.cs index 5f332b591..8a8c9a7f3 100644 --- a/tests/Melodee.Tests.Common/Services/UserServicePasswordResetTests.cs +++ b/tests/Melodee.Tests.Common/Services/UserServicePasswordResetTests.cs @@ -2,6 +2,7 @@ using Melodee.Common.Constants; using Melodee.Common.Data.Models; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Services; using Melodee.Common.Services.Security; @@ -39,7 +40,8 @@ private UserService CreateUserService(IMelodeeConfigurationFactory? configFactor GetPodcastService(), actualBus, passwordHashService, - secretProtector); + secretProtector, + new ImageProcessor()); var userAuthenticationService = new UserAuthenticationService( Logger, passwordHashService, diff --git a/tests/Melodee.Tests.Common/Services/UserServiceTests.cs b/tests/Melodee.Tests.Common/Services/UserServiceTests.cs index 70f3fb14b..0866112d6 100644 --- a/tests/Melodee.Tests.Common/Services/UserServiceTests.cs +++ b/tests/Melodee.Tests.Common/Services/UserServiceTests.cs @@ -3,6 +3,7 @@ using Melodee.Common.Data.Models; using Melodee.Common.Enums; using Melodee.Common.Extensions; +using Melodee.Common.Imaging; using Melodee.Common.MessageBus.Events; using Melodee.Common.Models; using Melodee.Common.Models.Collection; @@ -57,7 +58,8 @@ private UserProfileService CreateUserProfileService(IMelodeeConfigurationFactory GetPodcastService(), actualBus, MockPasswordHashService(), - MockSecretProtector()); + MockSecretProtector(), + new ImageProcessor()); } private UserAuthenticationService CreateUserAuthenticationService(IMelodeeConfigurationFactory? configFactory = null, IBus? bus = null) diff --git a/tests/Melodee.Tests.Common/TestsBase.cs b/tests/Melodee.Tests.Common/TestsBase.cs index 2794880c5..a8a0938ac 100644 --- a/tests/Melodee.Tests.Common/TestsBase.cs +++ b/tests/Melodee.Tests.Common/TestsBase.cs @@ -2,6 +2,7 @@ using Melodee.Common.Constants; using Melodee.Common.Data.Models; using Melodee.Common.Enums; +using Melodee.Common.Imaging; using Melodee.Common.Models; using Melodee.Common.Plugins.Conversion.Image; using Melodee.Common.Plugins.Validation; @@ -29,12 +30,12 @@ public TestsBase() protected ImageConvertor GetImageConvertor() { - return new ImageConvertor(NewPluginsConfiguration()); + return new ImageConvertor(new ImageProcessor(), NewPluginsConfiguration()); } protected IImageValidator GetImageValidator() { - return new ImageValidator(NewPluginsConfiguration()); + return new ImageValidator(new ImageProcessor(), NewPluginsConfiguration()); } protected IAlbumValidator GetAlbumValidator()