mirror of
				https://github.com/D4M13N-D3V/art_platform.git
				synced 2025-10-31 17:45:39 +00:00 
			
		
		
		
	API
This commit is contained in:
		
							parent
							
								
									93198c680b
								
							
						
					
					
						commit
						1cba55bdb1
					
				
							
								
								
									
										55
									
								
								.github/workflows/build-image.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								.github/workflows/build-image.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| name: build-image | ||||
| on: | ||||
|   push: | ||||
|     branches: [main] | ||||
| 
 | ||||
| jobs: | ||||
|   build-image: | ||||
|     runs-on: [ubuntu-latest] | ||||
|     env: | ||||
|       DOTNET_INSTALL_DIR: "/home/runner" | ||||
|     permissions: | ||||
|       contents: write | ||||
|       packages: write | ||||
|     steps: | ||||
|       - name: 'Cleanup build folder' | ||||
|         run: | | ||||
|           rm ./* -r || true | ||||
|           rm ./.??* -r  || true | ||||
|          | ||||
|       - uses: actions/setup-dotnet@v3 | ||||
|         with: | ||||
|           dotnet-version: 6.0.x | ||||
| 
 | ||||
|       - name: Set up GitVersion | ||||
|         uses: gittools/actions/gitversion/setup@v0.9.15 | ||||
|         with: | ||||
|           versionSpec: '5.x' | ||||
|      | ||||
|       - name: Checkout code | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
| 
 | ||||
|       - name: Execute GitVersion | ||||
|         uses: gittools/actions/gitversion/execute@v0.9.15 | ||||
|         with: | ||||
|           useConfigFile: true | ||||
|           configFilePath: GitVersion.yml | ||||
| 
 | ||||
|       - name: login into registry | ||||
|         run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://ghcr.io -u $ --password-stdin | ||||
| 
 | ||||
|       - name: Build image | ||||
|         env: | ||||
|           dockerfile: ./src/ArtPlatform.API/Dockerfile | ||||
|           docker_image_name: ghcr.io/damientehdemon/artplatform-api | ||||
|         run: | | ||||
|           docker build --build-arg NUGET_SOURCE=https://nuget.pkg.github.com/data443/index.json --build-arg NUGET_API_KEY=${{ secrets.PACKAGE_TOKEN }} -t ${{ env.docker_image_name }}:${{ env.GitVersion_MajorMinorPatch }} -f ${{ env.dockerfile }} --force-rm . | ||||
|           docker tag ${{ env.docker_image_name }}:${{ env.GitVersion_MajorMinorPatch }} ${{ env.docker_image_name }}:latest | ||||
|           docker push --all-tags ${{ env.docker_image_name }} | ||||
| 
 | ||||
|       - name: Tag branch | ||||
|         run: | | ||||
|           git tag ${{ env.GitVersion_MajorMinorPatch }} | ||||
|           git push origin ${{ env.GitVersion_MajorMinorPatch }} | ||||
							
								
								
									
										210
									
								
								ArtPlatform.Database/.idea/.idea.ArtPlatform/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								ArtPlatform.Database/.idea/.idea.ArtPlatform/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,210 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="AutoGeneratedRunConfigurationManager"> | ||||
|     <projectFile profileName="http">ArtPlatform.API/ArtPlatform.API.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.API/ArtPlatform.API.csproj</projectFile> | ||||
|     <projectFile>ArtPlatform.Database.Migrator/ArtPlatform.Database.Migrator.csproj</projectFile> | ||||
|     <projectFile profileName="http">ArtPlatform/ArtPlatform.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform/ArtPlatform.csproj</projectFile> | ||||
|   </component> | ||||
|   <component name="AutoImportSettings"> | ||||
|     <option name="autoReloadType" value="SELECTIVE" /> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="e251c08f-6fd2-4319-a6ec-5f03319157f3" name="Changes" comment=""> | ||||
|       <change afterPath="$PROJECT_DIR$/../src/ArtPlatform.Database.Migrator/ArtPlatform.Database.Migrator.csproj" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../src/ArtPlatform.Database.Migrator/Program.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../src/ArtPlatform.Database/ApplicationDbContext.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../src/ArtPlatform.Database/ArtPlatform.Database.csproj" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.dockerignore" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/.gitignore" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/aws.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/encodings.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/indexLayout.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/vcs.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlaform.DAL/ArtPlaform.DAL.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlaform.DAL/Class1.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/ArtPlatform.Api.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Controllers/WeatherForecastController.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Dockerfile" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Program.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Properties/launchSettings.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/WeatherForecast.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.Development.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/ArtPlatform.DatabaseUpdater.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/Dockerfile" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/Program.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.sln" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/aws.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/indexLayout.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/projectSettingsUpdater.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/vcs.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/workspace.xml" beforeDir="false" /> | ||||
|     </list> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||
|     <option name="LAST_RESOLUTION" value="IGNORE" /> | ||||
|   </component> | ||||
|   <component name="Git.Settings"> | ||||
|     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> | ||||
|   </component> | ||||
|   <component name="KubernetesApiProvider">{ | ||||
|   "contexts": [ | ||||
|     { | ||||
|       "name": "minikube", | ||||
|       "originalNamespace": "default" | ||||
|     } | ||||
|   ], | ||||
|   "isMigrated": true | ||||
| }</component> | ||||
|   <component name="KubernetesSettings"> | ||||
|     <option name="contextName" value="minikube" /> | ||||
|   </component> | ||||
|   <component name="ProjectColorInfo">{ | ||||
|   "associatedIndex": 8 | ||||
| }</component> | ||||
|   <component name="ProjectId" id="2bVSVHjAxjbTSogi69zTRZwrMUs" /> | ||||
|   <component name="ProjectLevelVcsManager"> | ||||
|     <ConfirmationsSetting value="2" id="Add" /> | ||||
|   </component> | ||||
|   <component name="ProjectViewState"> | ||||
|     <option name="hideEmptyMiddlePackages" value="true" /> | ||||
|     <option name="showLibraryContents" value="true" /> | ||||
|   </component> | ||||
|   <component name="PropertiesComponent"><![CDATA[{ | ||||
|   "keyToString": { | ||||
|     ".NET Launch Settings Profile.ArtPlatform.API: https.executor": "Run", | ||||
|     ".NET Project.ArtPlatform.Database.Migrator.executor": "Run", | ||||
|     "Docker.ArtPlatform.API/Dockerfile.executor": "Run", | ||||
|     "HTTP Request.All in generated-requests.executor": "Run", | ||||
|     "RunOnceActivity.OpenProjectViewOnStart": "true", | ||||
|     "RunOnceActivity.ShowReadmeOnStart": "true", | ||||
|     "git-widget-placeholder": "main", | ||||
|     "node.js.detected.package.eslint": "true", | ||||
|     "node.js.detected.package.tslint": "true", | ||||
|     "node.js.selected.package.eslint": "(autodetect)", | ||||
|     "node.js.selected.package.tslint": "(autodetect)", | ||||
|     "nodejs_package_manager_path": "npm", | ||||
|     "settings.editor.selected.configurable": "preferences.pluginManager", | ||||
|     "vue.rearranger.settings.migration": "true" | ||||
|   }, | ||||
|   "keyToStringList": { | ||||
|     "DatabaseDriversLRU": [ | ||||
|       "postgresql" | ||||
|     ], | ||||
|     "rider.external.source.directories": [ | ||||
|       "/home/damienostler/.config/JetBrains/Rider2023.3/resharper-host/DecompilerCache", | ||||
|       "/home/damienostler/.config/JetBrains/Rider2023.3/resharper-host/SourcesCache", | ||||
|       "/home/damienostler/.local/share/Symbols/src" | ||||
|     ] | ||||
|   } | ||||
| }]]></component> | ||||
|   <component name="RunManager" selected=".NET Launch Settings Profile.ArtPlatform.API: https"> | ||||
|     <configuration name="ArtPlatform.Database.Migrator" type="DotNetProject" factoryName=".NET Project"> | ||||
|       <option name="EXE_PATH" value="" /> | ||||
|       <option name="PROGRAM_PARAMETERS" value="" /> | ||||
|       <option name="WORKING_DIRECTORY" value="" /> | ||||
|       <option name="PASS_PARENT_ENVS" value="1" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="PROJECT_PATH" value="$PROJECT_DIR$/ArtPlatform.Database.Migrator/ArtPlatform.Database.Migrator.csproj" /> | ||||
|       <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_KIND" value="DotNetCore" /> | ||||
|       <option name="PROJECT_TFM" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="All in generated-requests" type="HttpClient.HttpRequestRunConfigurationType" factoryName="HTTP Request" temporary="true" path="$APPLICATION_CONFIG_DIR$/scratches/generated-requests.http"> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.API: http" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.API/ArtPlatform.API.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="http" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.API: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.API/ArtPlatform.API.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="https" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.API/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.api" /> | ||||
|           <option name="containerName" value="artplatform.api" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.API/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration default="true" type="docker-deploy" factoryName="dockerfile" temporary="true"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings /> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <recent_temporary> | ||||
|       <list> | ||||
|         <item itemvalue="HTTP Request.All in generated-requests" /> | ||||
|       </list> | ||||
|     </recent_temporary> | ||||
|   </component> | ||||
|   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> | ||||
|   <component name="TaskManager"> | ||||
|     <task active="true" id="Default" summary="Default task"> | ||||
|       <changelist id="e251c08f-6fd2-4319-a6ec-5f03319157f3" name="Changes" comment="" /> | ||||
|       <created>1706298775013</created> | ||||
|       <option name="number" value="Default" /> | ||||
|       <option name="presentableId" value="Default" /> | ||||
|       <updated>1706298775013</updated> | ||||
|       <workItem from="1706298780176" duration="5462000" /> | ||||
|       <workItem from="1706328737604" duration="1191000" /> | ||||
|       <workItem from="1706329945610" duration="25965000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TypeScriptGeneratedFilesManager"> | ||||
|     <option name="version" value="3" /> | ||||
|   </component> | ||||
|   <component name="VcsManagerConfiguration"> | ||||
|     <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,9 +0,0 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <TargetFramework>net6.0</TargetFramework> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <Nullable>enable</Nullable> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
| </Project> | ||||
| @ -1,5 +0,0 @@ | ||||
| namespace ArtPlaform.DAL; | ||||
| 
 | ||||
| public class Class1 | ||||
| { | ||||
| } | ||||
| @ -1,20 +0,0 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk.Web"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <TargetFramework>net6.0</TargetFramework> | ||||
|         <Nullable>enable</Nullable> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0"/> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <Content Include="..\.dockerignore"> | ||||
|         <Link>.dockerignore</Link> | ||||
|       </Content> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
| @ -1,32 +0,0 @@ | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| 
 | ||||
| namespace ArtPlatform.Api.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("[controller]")]
 | ||||
| public class WeatherForecastController : ControllerBase | ||||
| { | ||||
|     private static readonly string[] Summaries = new[] | ||||
|     { | ||||
|         "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | ||||
|     }; | ||||
| 
 | ||||
|     private readonly ILogger<WeatherForecastController> _logger; | ||||
| 
 | ||||
|     public WeatherForecastController(ILogger<WeatherForecastController> logger) | ||||
|     { | ||||
|         _logger = logger; | ||||
|     } | ||||
| 
 | ||||
|     [HttpGet(Name = "GetWeatherForecast")] | ||||
|     public IEnumerable<WeatherForecast> Get() | ||||
|     { | ||||
|         return Enumerable.Range(1, 5).Select(index => new WeatherForecast | ||||
|             { | ||||
|                 Date = DateTime.Now.AddDays(index), | ||||
|                 TemperatureC = Random.Shared.Next(-20, 55), | ||||
|                 Summary = Summaries[Random.Shared.Next(Summaries.Length)] | ||||
|             }) | ||||
|             .ToArray(); | ||||
|     } | ||||
| } | ||||
| @ -1,22 +0,0 @@ | ||||
| FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base | ||||
| WORKDIR /app | ||||
| EXPOSE 80 | ||||
| EXPOSE 443 | ||||
| 
 | ||||
| FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| WORKDIR /src | ||||
| COPY ["ArtPlatform.Api/ArtPlatform.Api.csproj", "ArtPlatform.Api/"] | ||||
| RUN dotnet restore "ArtPlatform.Api/ArtPlatform.Api.csproj" | ||||
| COPY . . | ||||
| WORKDIR "/src/ArtPlatform.Api" | ||||
| RUN dotnet build "ArtPlatform.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build | ||||
| 
 | ||||
| FROM build AS publish | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| RUN dotnet publish "ArtPlatform.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | ||||
| 
 | ||||
| FROM base AS final | ||||
| WORKDIR /app | ||||
| COPY --from=publish /app/publish . | ||||
| ENTRYPOINT ["dotnet", "ArtPlatform.Api.dll"] | ||||
| @ -1,25 +0,0 @@ | ||||
| var builder = WebApplication.CreateBuilder(args); | ||||
| 
 | ||||
| // Add services to the container. | ||||
| 
 | ||||
| builder.Services.AddControllers(); | ||||
| // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | ||||
| builder.Services.AddEndpointsApiExplorer(); | ||||
| builder.Services.AddSwaggerGen(); | ||||
| 
 | ||||
| var app = builder.Build(); | ||||
| 
 | ||||
| // Configure the HTTP request pipeline. | ||||
| if (app.Environment.IsDevelopment()) | ||||
| { | ||||
|     app.UseSwagger(); | ||||
|     app.UseSwaggerUI(); | ||||
| } | ||||
| 
 | ||||
| app.UseHttpsRedirection(); | ||||
| 
 | ||||
| app.UseAuthorization(); | ||||
| 
 | ||||
| app.MapControllers(); | ||||
| 
 | ||||
| app.Run(); | ||||
| @ -1,12 +0,0 @@ | ||||
| namespace ArtPlatform.Api; | ||||
| 
 | ||||
| public class WeatherForecast | ||||
| { | ||||
|     public DateTime Date { get; set; } | ||||
| 
 | ||||
|     public int TemperatureC { get; set; } | ||||
| 
 | ||||
|     public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); | ||||
| 
 | ||||
|     public string? Summary { get; set; } | ||||
| } | ||||
| @ -1,9 +0,0 @@ | ||||
| { | ||||
|   "Logging": { | ||||
|     "LogLevel": { | ||||
|       "Default": "Information", | ||||
|       "Microsoft.AspNetCore": "Warning" | ||||
|     } | ||||
|   }, | ||||
|   "AllowedHosts": "*" | ||||
| } | ||||
| @ -1,17 +0,0 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <OutputType>Exe</OutputType> | ||||
|         <TargetFramework>net6.0</TargetFramework> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <Nullable>enable</Nullable> | ||||
|         <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <Content Include="..\.dockerignore"> | ||||
|         <Link>.dockerignore</Link> | ||||
|       </Content> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
| @ -1,20 +0,0 @@ | ||||
| FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base | ||||
| WORKDIR /app | ||||
| 
 | ||||
| FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| WORKDIR /src | ||||
| COPY ["ArtPlatform.DatabaseUpdater/ArtPlatform.DatabaseUpdater.csproj", "ArtPlatform.DatabaseUpdater/"] | ||||
| RUN dotnet restore "ArtPlatform.DatabaseUpdater/ArtPlatform.DatabaseUpdater.csproj" | ||||
| COPY . . | ||||
| WORKDIR "/src/ArtPlatform.DatabaseUpdater" | ||||
| RUN dotnet build "ArtPlatform.DatabaseUpdater.csproj" -c $BUILD_CONFIGURATION -o /app/build | ||||
| 
 | ||||
| FROM build AS publish | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| RUN dotnet publish "ArtPlatform.DatabaseUpdater.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | ||||
| 
 | ||||
| FROM base AS final | ||||
| WORKDIR /app | ||||
| COPY --from=publish /app/publish . | ||||
| ENTRYPOINT ["dotnet", "ArtPlatform.DatabaseUpdater.dll"] | ||||
| @ -1 +0,0 @@ | ||||
| Console.WriteLine("Hello, World!"); | ||||
| @ -1,28 +0,0 @@ | ||||
|  | ||||
| Microsoft Visual Studio Solution File, Format Version 12.00 | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArtPlatform.Api", "ArtPlatform.Api\ArtPlatform.Api.csproj", "{BC5949C8-6B4E-447E-92AC-8472116FCD9D}" | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArtPlaform.DAL", "ArtPlaform.DAL\ArtPlaform.DAL.csproj", "{9950751C-C51D-4846-AFA4-D516F55620C3}" | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArtPlatform.DatabaseUpdater", "ArtPlatform.DatabaseUpdater\ArtPlatform.DatabaseUpdater.csproj", "{10EE4F10-8980-4C5F-AE6D-AC159EF95024}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| 		Release|Any CPU = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
| 		{BC5949C8-6B4E-447E-92AC-8472116FCD9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{BC5949C8-6B4E-447E-92AC-8472116FCD9D}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{BC5949C8-6B4E-447E-92AC-8472116FCD9D}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{BC5949C8-6B4E-447E-92AC-8472116FCD9D}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{9950751C-C51D-4846-AFA4-D516F55620C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{9950751C-C51D-4846-AFA4-D516F55620C3}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{9950751C-C51D-4846-AFA4-D516F55620C3}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{9950751C-C51D-4846-AFA4-D516F55620C3}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{10EE4F10-8980-4C5F-AE6D-AC159EF95024}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{10EE4F10-8980-4C5F-AE6D-AC159EF95024}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{10EE4F10-8980-4C5F-AE6D-AC159EF95024}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{10EE4F10-8980-4C5F-AE6D-AC159EF95024}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
| @ -1,20 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="accountSettings"> | ||||
|     <option name="activeProfile" value="profile:default" /> | ||||
|     <option name="activeRegion" value="us-east-1" /> | ||||
|     <option name="recentlyUsedProfiles"> | ||||
|       <list> | ||||
|         <option value="profile:default" /> | ||||
|       </list> | ||||
|     </option> | ||||
|     <option name="recentlyUsedRegions"> | ||||
|       <list> | ||||
|         <option value="us-east-1" /> | ||||
|       </list> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="explorerToolWindow"> | ||||
|     <option name="selectedTab" value="Amazon Q + CodeWhisperer" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,8 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="UserContentModel"> | ||||
|     <attachedFolders /> | ||||
|     <explicitIncludes /> | ||||
|     <explicitExcludes /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="RiderProjectSettingsUpdater"> | ||||
|     <option name="vcsConfiguration" value="2" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,114 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="AutoGeneratedRunConfigurationManager"> | ||||
|     <projectFile profileName="Damien.ArtPlatform">Damien.ArtPlatform.csproj</projectFile> | ||||
|   </component> | ||||
|   <component name="AutoImportSettings"> | ||||
|     <option name="autoReloadType" value="SELECTIVE" /> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="254f5558-0caf-48c9-8139-28250aa5f655" name="Changes" comment=""> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/ArtPlatform.Api.csproj" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Controllers/WeatherForecastController.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Program.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Properties/launchSettings.json" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/WeatherForecast.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.Development.json" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.json" afterDir="false" /> | ||||
|     </list> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||
|     <option name="LAST_RESOLUTION" value="IGNORE" /> | ||||
|   </component> | ||||
|   <component name="Git.Settings"> | ||||
|     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> | ||||
|   </component> | ||||
|   <component name="ProjectColorInfo"><![CDATA[{ | ||||
|   "associatedIndex": 6 | ||||
| }]]></component> | ||||
|   <component name="ProjectId" id="2bKuauvXoud9NB1keP5ijmPwhnY" /> | ||||
|   <component name="ProjectLevelVcsManager"> | ||||
|     <ConfirmationsSetting value="2" id="Add" /> | ||||
|   </component> | ||||
|   <component name="ProjectViewState"> | ||||
|     <option name="hideEmptyMiddlePackages" value="true" /> | ||||
|     <option name="showLibraryContents" value="true" /> | ||||
|   </component> | ||||
|   <component name="PropertiesComponent"><![CDATA[{ | ||||
|   "keyToString": { | ||||
|     "ASKED_ADD_EXTERNAL_FILES": "true", | ||||
|     "RunOnceActivity.OpenProjectViewOnStart": "true", | ||||
|     "RunOnceActivity.ShowReadmeOnStart": "true", | ||||
|     "git-widget-placeholder": "main", | ||||
|     "node.js.detected.package.eslint": "true", | ||||
|     "node.js.detected.package.tslint": "true", | ||||
|     "node.js.selected.package.eslint": "(autodetect)", | ||||
|     "node.js.selected.package.tslint": "(autodetect)", | ||||
|     "nodejs_package_manager_path": "npm", | ||||
|     "settings.editor.selected.configurable": "preferences.pluginManager", | ||||
|     "vue.rearranger.settings.migration": "true" | ||||
|   } | ||||
| }]]></component> | ||||
|   <component name="RunManager" selected=".NET Launch Settings Profile.Damien.ArtPlatform"> | ||||
|     <configuration name="Damien.ArtPlatform" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/Damien.ArtPlatform.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net6.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="Damien.ArtPlatform" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="damien.artplatform" /> | ||||
|           <option name="containerName" value="damien.artplatform" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="80" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration default="true" type="docker-deploy" factoryName="dockerfile" temporary="true"> | ||||
|       <deployment type="dockerfile" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|   </component> | ||||
|   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> | ||||
|   <component name="TaskManager"> | ||||
|     <task active="true" id="Default" summary="Default task"> | ||||
|       <changelist id="254f5558-0caf-48c9-8139-28250aa5f655" name="Changes" comment="" /> | ||||
|       <created>1705976158668</created> | ||||
|       <option name="number" value="Default" /> | ||||
|       <option name="presentableId" value="Default" /> | ||||
|       <updated>1705976158668</updated> | ||||
|       <workItem from="1705976159791" duration="435000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TypeScriptGeneratedFilesManager"> | ||||
|     <option name="version" value="3" /> | ||||
|   </component> | ||||
|   <component name="VcsManagerConfiguration"> | ||||
|     <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> | ||||
|     <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										370
									
								
								src/.idea/.idea.ArtPlatform.Database/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										370
									
								
								src/.idea/.idea.ArtPlatform.Database/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,370 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="AutoGeneratedRunConfigurationManager"> | ||||
|     <projectFile profileName="http">ArtPlatform.API/ArtPlatform.API.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.API/ArtPlatform.API.csproj</projectFile> | ||||
|     <projectFile profileName="http">ArtPlatform.App/ArtPlatform.App.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.App/ArtPlatform.App.csproj</projectFile> | ||||
|     <projectFile>ArtPlatform.Database.Migrator/ArtPlatform.Database.Migrator.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.UI/ArtPlatform.UI.csproj</projectFile> | ||||
|     <projectFile profileName="http">ArtPlatform.WebApp/ArtPlatform.WebApp.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.WebApp/ArtPlatform.WebApp.csproj</projectFile> | ||||
|     <projectFile profileName="http">ArtPlatform.WebApplication/ArtPlatform.WebApplication.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform.WebApplication/ArtPlatform.WebApplication.csproj</projectFile> | ||||
|     <projectFile profileName="http">ArtPlatform/ArtPlatform.csproj</projectFile> | ||||
|     <projectFile profileName="https">ArtPlatform/ArtPlatform.csproj</projectFile> | ||||
|   </component> | ||||
|   <component name="AutoImportSettings"> | ||||
|     <option name="autoReloadType" value="SELECTIVE" /> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="e251c08f-6fd2-4319-a6ec-5f03319157f3" name="Changes" comment=""> | ||||
|       <change afterPath="$PROJECT_DIR$/.dockerignore" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/.idea/.idea.ArtPlatform.Database/.idea/workspace.xml" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/ApplicationDatabaseConfigurationModel.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/ApplicationDbContext.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/ArtPlatform.Database.csproj" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerConfiguredSetting.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerProfilePortfolioPiece.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerService.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerServiceOrder.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerServiceOrderMessage.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerServiceOrderMessageAttachment.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerServiceOrderReview.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/SellerSetting.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/User.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Entities/UserSellerProfile.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.Database/Enums/EnumOrderStatus.cs" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/ArtPlatform.sln" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.dockerignore" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/.gitignore" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/aws.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/encodings.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/indexLayout.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/.idea/.idea.ArtPlatform/.idea/vcs.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlaform.DAL/ArtPlaform.DAL.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlaform.DAL/Class1.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/ArtPlatform.Api.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Controllers/WeatherForecastController.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Dockerfile" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Program.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/Properties/launchSettings.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/WeatherForecast.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.Development.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.Api/appsettings.json" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/ArtPlatform.DatabaseUpdater.csproj" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/Dockerfile" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.DatabaseUpdater/Program.cs" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../ArtPlatform/ArtPlatform.sln" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/aws.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/indexLayout.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/projectSettingsUpdater.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/vcs.xml" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/../Damien.ArtPlatform/.idea/.idea.Damien.ArtPlatform/.idea/workspace.xml" beforeDir="false" /> | ||||
|     </list> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||
|     <option name="LAST_RESOLUTION" value="IGNORE" /> | ||||
|   </component> | ||||
|   <component name="Git.Settings"> | ||||
|     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> | ||||
|   </component> | ||||
|   <component name="ProjectColorInfo"><![CDATA[{ | ||||
|   "associatedIndex": 8 | ||||
| }]]></component> | ||||
|   <component name="ProjectId" id="2bVSVHjAxjbTSogi69zTRZwrMUs" /> | ||||
|   <component name="ProjectLevelVcsManager"> | ||||
|     <ConfirmationsSetting value="2" id="Add" /> | ||||
|   </component> | ||||
|   <component name="ProjectViewState"> | ||||
|     <option name="hideEmptyMiddlePackages" value="true" /> | ||||
|     <option name="showLibraryContents" value="true" /> | ||||
|   </component> | ||||
|   <component name="PropertiesComponent"><![CDATA[{ | ||||
|   "keyToString": { | ||||
|     ".NET Launch Settings Profile.ArtPlatform.API: http.executor": "Run", | ||||
|     ".NET Launch Settings Profile.ArtPlatform.App: http.executor": "Run", | ||||
|     ".NET Launch Settings Profile.ArtPlatform.WebApp: http.executor": "Run", | ||||
|     "RunOnceActivity.OpenProjectViewOnStart": "true", | ||||
|     "RunOnceActivity.ShowReadmeOnStart": "true", | ||||
|     "git-widget-placeholder": "main", | ||||
|     "last_opened_file_path": "/home/damienostler/Documents/Github Repositories/art_platform/ArtPlatform.Database/ArtPlatform/ArtPlatform.sln", | ||||
|     "node.js.detected.package.eslint": "true", | ||||
|     "node.js.detected.package.tslint": "true", | ||||
|     "node.js.selected.package.eslint": "(autodetect)", | ||||
|     "node.js.selected.package.tslint": "(autodetect)", | ||||
|     "nodejs_package_manager_path": "npm", | ||||
|     "settings.editor.selected.configurable": "preferences.pluginManager", | ||||
|     "vue.rearranger.settings.migration": "true" | ||||
|   }, | ||||
|   "keyToStringList": { | ||||
|     "DatabaseDriversLRU": [ | ||||
|       "postgresql" | ||||
|     ], | ||||
|     "rider.external.source.directories": [ | ||||
|       "/home/damienostler/.config/JetBrains/Rider2023.3/resharper-host/DecompilerCache", | ||||
|       "/home/damienostler/.config/JetBrains/Rider2023.3/resharper-host/SourcesCache", | ||||
|       "/home/damienostler/.local/share/Symbols/src" | ||||
|     ] | ||||
|   } | ||||
| }]]></component> | ||||
|   <component name="RunManager" selected=".NET Launch Settings Profile.ArtPlatform.App: http"> | ||||
|     <configuration name="ArtPlatform.Database.Migrator" type="DotNetProject" factoryName=".NET Project"> | ||||
|       <option name="EXE_PATH" value="" /> | ||||
|       <option name="PROGRAM_PARAMETERS" value="" /> | ||||
|       <option name="WORKING_DIRECTORY" value="" /> | ||||
|       <option name="PASS_PARENT_ENVS" value="1" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="PROJECT_PATH" value="$PROJECT_DIR$/ArtPlatform.Database.Migrator/ArtPlatform.Database.Migrator.csproj" /> | ||||
|       <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" /> | ||||
|       <option name="PROJECT_KIND" value="DotNetCore" /> | ||||
|       <option name="PROJECT_TFM" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform: http" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform/ArtPlatform.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="http" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform/ArtPlatform.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="https" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.API: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.API/ArtPlatform.API.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="https" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.App: http" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.App/ArtPlatform.App.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="http" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.App: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.App/ArtPlatform.App.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="https" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.WebApplication: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile"> | ||||
|       <option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/ArtPlatform.WebApplication/ArtPlatform.WebApplication.csproj" /> | ||||
|       <option name="LAUNCH_PROFILE_TFM" value="net8.0" /> | ||||
|       <option name="LAUNCH_PROFILE_NAME" value="https" /> | ||||
|       <option name="USE_EXTERNAL_CONSOLE" value="0" /> | ||||
|       <option name="USE_MONO" value="0" /> | ||||
|       <option name="RUNTIME_ARGUMENTS" value="" /> | ||||
|       <option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" /> | ||||
|       <option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" /> | ||||
|       <option name="SEND_DEBUG_REQUEST" value="1" /> | ||||
|       <option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" /> | ||||
|       <method v="2"> | ||||
|         <option name="Build" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.API/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.api" /> | ||||
|           <option name="containerName" value="artplatform.api" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.API/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.App/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.app" /> | ||||
|           <option name="containerName" value="artplatform.app" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.App/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform" /> | ||||
|           <option name="containerName" value="artplatform" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.UI/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.ui" /> | ||||
|           <option name="containerName" value="artplatform.ui" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.UI/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.WebApp/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.webapp" /> | ||||
|           <option name="containerName" value="artplatform.webapp" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.WebApp/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration name="ArtPlatform.WebApplication/Dockerfile" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> | ||||
|       <deployment type="dockerfile"> | ||||
|         <settings> | ||||
|           <option name="imageTag" value="artplatform.webapplication" /> | ||||
|           <option name="containerName" value="artplatform.webapplication" /> | ||||
|           <option name="contextFolderPath" value="$PROJECT_DIR$" /> | ||||
|           <option name="portBindings"> | ||||
|             <list> | ||||
|               <DockerPortBindingImpl> | ||||
|                 <option name="containerPort" value="8080" /> | ||||
|                 <option name="hostIp" value="127.0.0.1" /> | ||||
|                 <option name="hostPort" value="8080" /> | ||||
|               </DockerPortBindingImpl> | ||||
|             </list> | ||||
|           </option> | ||||
|           <option name="sourceFilePath" value="ArtPlatform.WebApplication/Dockerfile" /> | ||||
|         </settings> | ||||
|       </deployment> | ||||
|       <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|     <configuration default="true" type="docker-deploy" factoryName="dockerfile" temporary="true"> | ||||
|       <deployment type="dockerfile" /> | ||||
|       <method v="2" /> | ||||
|     </configuration> | ||||
|   </component> | ||||
|   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> | ||||
|   <component name="TaskManager"> | ||||
|     <task active="true" id="Default" summary="Default task"> | ||||
|       <changelist id="e251c08f-6fd2-4319-a6ec-5f03319157f3" name="Changes" comment="" /> | ||||
|       <created>1706298775013</created> | ||||
|       <option name="number" value="Default" /> | ||||
|       <option name="presentableId" value="Default" /> | ||||
|       <updated>1706298775013</updated> | ||||
|       <workItem from="1706298780176" duration="10198000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TypeScriptGeneratedFilesManager"> | ||||
|     <option name="version" value="3" /> | ||||
|   </component> | ||||
|   <component name="VcsManagerConfiguration"> | ||||
|     <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -2,10 +2,10 @@ | ||||
| /shelf/ | ||||
| /workspace.xml | ||||
| # Rider ignored files | ||||
| /.idea.ArtPlatform.iml | ||||
| /contentModel.xml | ||||
| /modules.xml | ||||
| /contentModel.xml | ||||
| /projectSettingsUpdater.xml | ||||
| /.idea.ArtPlatform.Database.iml | ||||
| # Editor-based HTTP Client requests | ||||
| /httpRequests/ | ||||
| # Datasource local storage ignored files | ||||
							
								
								
									
										1
									
								
								src/.idea/.idea.ArtPlatform/.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/.idea/.idea.ArtPlatform/.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| ArtPlatform | ||||
							
								
								
									
										19
									
								
								src/.idea/.idea.ArtPlatform/.idea/dataSources.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/.idea/.idea.ArtPlatform/.idea/dataSources.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="DataSourceManagerImpl" format="xml" multifile-model="true"> | ||||
|     <data-source source="LOCAL" name="postgres@localhost" uuid="f139dccd-eb47-4ad5-bb4f-f457f16ec1b7"> | ||||
|       <driver-ref>postgresql</driver-ref> | ||||
|       <synchronize>true</synchronize> | ||||
|       <jdbc-driver>org.postgresql.Driver</jdbc-driver> | ||||
|       <jdbc-url>jdbc:postgresql://localhost:5432/postgres</jdbc-url> | ||||
|       <working-dir>$ProjectFileDir$</working-dir> | ||||
|     </data-source> | ||||
|     <data-source source="LOCAL" name="artplatform@localhost" uuid="e4a3d98b-bfa1-4036-a59a-24d9e362740e"> | ||||
|       <driver-ref>postgresql</driver-ref> | ||||
|       <synchronize>true</synchronize> | ||||
|       <jdbc-driver>org.postgresql.Driver</jdbc-driver> | ||||
|       <jdbc-url>jdbc:postgresql://localhost:5432/artplatform</jdbc-url> | ||||
|       <working-dir>$ProjectFileDir$</working-dir> | ||||
|     </data-source> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										30
									
								
								src/ArtPlatform.API/ArtPlatform.API.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/ArtPlatform.API/ArtPlatform.API.csproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk.Web"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <TargetFramework>net8.0</TargetFramework> | ||||
|         <Nullable>enable</Nullable> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <InvariantGlobalization>true</InvariantGlobalization> | ||||
|         <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | ||||
|     </PropertyGroup> | ||||
|     <PropertyGroup> | ||||
|         <GenerateDocumentationFile>true</GenerateDocumentationFile> | ||||
|     </PropertyGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Auth0.AspNetCore.Authentication" Version="1.4.1" /> | ||||
|         <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.1" /> | ||||
|         <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.1"/> | ||||
|         <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <Content Include="..\.dockerignore"> | ||||
|         <Link>.dockerignore</Link> | ||||
|       </Content> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <ProjectReference Include="..\ArtPlatform.Database\ArtPlatform.Database.csproj" /> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
| @ -0,0 +1,69 @@ | ||||
| using ArtPlatform.API.Models.SellerProfileRequest; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class AdminSellerProfileRequestsController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
| 
 | ||||
|     public AdminSellerProfileRequestsController(ApplicationDbContext dbContext) | ||||
|     { | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-profile-request")] | ||||
|     [Route("SellerRequests")] | ||||
|     public async Task<IActionResult> GetSellerRequests(int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var requests = _dbContext.SellerProfileRequests.Skip(offset).Take(pageSize).ToList(); | ||||
|         var result = requests.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-profile-request")] | ||||
|     [Route("SellerRequests/Count")] | ||||
|     public async Task<IActionResult> GetSellerRequestsCount() | ||||
|     { | ||||
|         var result = _dbContext.SellerProfileRequests.Count(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-profile-request")] | ||||
|     [Route("SellerRequests/{userId}")] | ||||
|     public async Task<IActionResult> AcceptSellerRequest(string userId) | ||||
|     { | ||||
|         var request = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId); | ||||
|          | ||||
|         if(request==null) | ||||
|             return NotFound("No request for that user exists."); | ||||
|          | ||||
|         if (request.Accepted == true) | ||||
|             return BadRequest("User is already a seller."); | ||||
| 
 | ||||
|         request.Accepted = true; | ||||
|         request.AcceptedDate = DateTime.UtcNow; | ||||
| 
 | ||||
|         var newSellerProfile = new UserSellerProfile() | ||||
|         { | ||||
|             UserId = userId, | ||||
|             AgeRestricted = false, | ||||
|             Biography = string.Empty, | ||||
|             SocialMediaLinks = new List<string>(){} | ||||
|         }; | ||||
|         _dbContext.UserSellerProfiles.Add(newSellerProfile); | ||||
|         request = _dbContext.SellerProfileRequests.Update(request).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = request.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										118
									
								
								src/ArtPlatform.API/Controllers/DiscoveryController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								src/ArtPlatform.API/Controllers/DiscoveryController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | ||||
| using ArtPlatform.API.Models.Discovery; | ||||
| using ArtPlatform.API.Models.SellerProfile; | ||||
| using ArtPlatform.API.Models.SellerService; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class DiscoveryController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
| 
 | ||||
|     public DiscoveryController(ApplicationDbContext dbContext) | ||||
|     { | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers")] | ||||
|     public async Task<IActionResult> GetSellers(string search="",int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var sellers = await _dbContext.UserSellerProfiles | ||||
|             .Where(x=>x.User.DisplayName.Contains(search)) | ||||
|             .Include(x=>x.User) | ||||
|             .Skip(offset).Take(pageSize).ToListAsync(); | ||||
|         var result = sellers.Select(x=>x.ToDiscoveryModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers/Count")] | ||||
|     public async Task<IActionResult> GetSellersCount(string search="") | ||||
|     { | ||||
|         var result = await _dbContext.UserSellerProfiles | ||||
|             .Where(x=>x.User.DisplayName.Contains(search)) | ||||
|             .Include(x=>x.User) | ||||
|             .CountAsync(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers/{sellerId:int}/Services")] | ||||
|     public async Task<IActionResult> GetSellerServices(int sellerId, int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var seller = await _dbContext.UserSellerProfiles | ||||
|             .Include(x=>x.User) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==sellerId); | ||||
|         if(seller==null) | ||||
|             return NotFound("Seller not found."); | ||||
|         var sellerServices = await _dbContext.SellerServices | ||||
|             .Include(x=>x.Reviews) | ||||
|             .Where(x=>x.SellerProfileId==sellerId) | ||||
|             .Skip(offset).Take(pageSize).ToListAsync(); | ||||
|         var result = sellerServices.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers/{sellerId:int}/Services/Count")] | ||||
|     public async Task<IActionResult> GetSellerServicesCount(int sellerId) | ||||
|     { | ||||
|         var seller = await _dbContext.UserSellerProfiles | ||||
|             .Include(x=>x.User) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==sellerId); | ||||
|         if(seller==null) | ||||
|             return NotFound("Seller not found."); | ||||
|         var sellerServices = await _dbContext.SellerServices | ||||
|             .Include(x=>x.Reviews) | ||||
|             .Where(x=>x.SellerProfileId==sellerId) | ||||
|             .ToListAsync(); | ||||
|         var result = sellerServices.Count; | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers/{sellerId:int}/Services/{serviceId:int}/Reviews")] | ||||
|     public async Task<IActionResult> GetSellerServiceReviews(int sellerId, int serviceId, int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var seller = await _dbContext.UserSellerProfiles | ||||
|             .Include(x=>x.User) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==sellerId); | ||||
|         if(seller==null) | ||||
|             return NotFound("Seller not found."); | ||||
|         var sellerService = await _dbContext.SellerServices | ||||
|             .Include(x=>x.Reviews).ThenInclude(x=>x.Reviewer) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==serviceId); | ||||
|         if(sellerService==null) | ||||
|             return NotFound("Seller service not found."); | ||||
|         var result = sellerService.Reviews.Select(x=> new DiscoveryReviewModel() | ||||
|         { | ||||
|             Rating = x.Rating, | ||||
|             WriterDisplayName = x.Reviewer.DisplayName, | ||||
|             WriterId = x.ReviewerId, | ||||
|         }).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Sellers/{sellerId:int}/Services/{serviceId:int}/Reviews/Count")] | ||||
|     public async Task<IActionResult> GetSellerServiceReviewsCount(int sellerId, int serviceId) | ||||
|     { | ||||
|         var seller = await _dbContext.UserSellerProfiles | ||||
|             .Include(x=>x.User) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==sellerId); | ||||
|         if(seller==null) | ||||
|             return NotFound("Seller not found."); | ||||
|         var sellerService = await _dbContext.SellerServices | ||||
|             .Include(x=>x.Reviews).ThenInclude(x=>x.Reviewer) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==serviceId); | ||||
|         if(sellerService==null) | ||||
|             return NotFound("Seller service not found."); | ||||
|         var result = sellerService.Reviews.Count; | ||||
|         return Ok(result); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										333
									
								
								src/ArtPlatform.API/Controllers/OrderController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										333
									
								
								src/ArtPlatform.API/Controllers/OrderController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,333 @@ | ||||
| using ArtPlatform.API.Extensions; | ||||
| using ArtPlatform.API.Models.Order; | ||||
| using ArtPlatform.API.Services.Storage; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| using ArtPlatform.Database.Enums; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class OrderController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
|     private readonly IStorage _storage; | ||||
|   | ||||
|     public OrderController(ApplicationDbContext dbContext, IStorage storage) | ||||
|     { | ||||
|         _storage = storage; | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
| 
 | ||||
|     [HttpGet] | ||||
|     [Route("Orders")] | ||||
|     [Authorize("read:orders")] | ||||
|     public async Task<IActionResult> GetOrders(int offset = 0, int pageSize = 10, EnumOrderStatus? status = null) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var orders = await _dbContext.SellerServiceOrders | ||||
|             .Where(x => x.BuyerId == userId && status==null ? true : status==x.Status) | ||||
|             .Skip(offset).Take(pageSize).ToListAsync(); | ||||
|         var result = orders.Select(x => x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Route("Sellers/{sellerId:int}/Services/{serviceId:int}")] | ||||
|     [Authorize("write:orders")] | ||||
|     public async Task<IActionResult> CreateOrder(int sellerId, int serviceId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles | ||||
|             .Include(x=>x.User) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==sellerId); | ||||
|         if(seller==null) | ||||
|             return NotFound("Seller not found."); | ||||
|         var service = await _dbContext.SellerServices | ||||
|             .Include(x=>x.Reviews) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==serviceId); | ||||
|         if(service==null) | ||||
|             return NotFound("Service not found."); | ||||
|          | ||||
|         if(_dbContext.SellerServiceOrders.Where(x=>x.BuyerId==userId && x.Status!=EnumOrderStatus.Completed && x.Status!=EnumOrderStatus.Cancelled).Count()>=3) | ||||
|             return BadRequest("You already have an order in progress. There is a limit of three at a time."); | ||||
|          | ||||
|         var order = new SellerServiceOrder() | ||||
|         { | ||||
|             BuyerId = userId, | ||||
|             SellerId = seller.Id, | ||||
|             SellerServiceId = serviceId, | ||||
|             Status = EnumOrderStatus.PendingAcceptance, | ||||
|             CreatedDate = DateTime.UtcNow, | ||||
|             Price = service.Price, | ||||
|             SellerService = service, | ||||
|             Buyer = await _dbContext.Users.FirstOrDefaultAsync(x=>x.Id==userId), | ||||
|         }; | ||||
|         order = _dbContext.SellerServiceOrders.Add(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}")] | ||||
|     public async Task<IActionResult> CancelOrder(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId) | ||||
|             return BadRequest("You are not the buyer of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed) | ||||
|             return BadRequest("Order is not in a cancellable state."); | ||||
|         order.Status = EnumOrderStatus.Cancelled; | ||||
|         order.EndDate = DateTime.UtcNow; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/AcceptPrice")] | ||||
|     public async Task<IActionResult> AcceptPrice(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.SellerService) | ||||
|             .Include(x=>x.Seller) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.DiscussingRequirements) | ||||
|             return BadRequest("Order has not been started yet."); | ||||
|         order.Status = EnumOrderStatus.InProgress; | ||||
|         order.TermsAcceptedDate = DateTime.UtcNow; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Accept")] | ||||
|     public async Task<IActionResult> Accept(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.InProgress) | ||||
|             return BadRequest("Order has not been started yet."); | ||||
|         if(order.Status<EnumOrderStatus.PendingReview) | ||||
|             return BadRequest("Order is in progress and not pending review."); | ||||
|         order.Status = EnumOrderStatus.Completed; | ||||
|         order.TermsAcceptedDate = DateTime.UtcNow; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Deny")] | ||||
|     public async Task<IActionResult> Deny(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.InProgress) | ||||
|             return BadRequest("Order has not been started yet."); | ||||
|         if(order.Status<EnumOrderStatus.PendingReview) | ||||
|             return BadRequest("Order is in progress and not pending review."); | ||||
|         order.Status = EnumOrderStatus.InProgress; | ||||
|         order.TermsAcceptedDate = DateTime.UtcNow; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Review")] | ||||
|     public async Task<IActionResult> Review(int orderId, [FromBody] SellerServiceOrderReviewModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Reviews) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId) | ||||
|             return BadRequest("You are not the buyer of this order."); | ||||
|         if(order.Status!=EnumOrderStatus.Completed) | ||||
|             return BadRequest("Order is not complete."); | ||||
|         if(order.Reviews.Any(x=>x.SellerServiceOrderId==orderId)) | ||||
|             return BadRequest("Order has already been reviewed."); | ||||
|         var review = new SellerServiceOrderReview() | ||||
|         { | ||||
|             SellerServiceOrderId = orderId, | ||||
|             SellerServiceId = order.SellerServiceId, | ||||
|             Rating = model.Rating, | ||||
|             Review = model.Review, | ||||
|             ReviewDate = DateTime.UtcNow, | ||||
|             ReviewerId = userId, | ||||
|             Reviewer = await _dbContext.Users.FirstOrDefaultAsync(x=>x.Id==userId), | ||||
|         }; | ||||
|         await _dbContext.SellerServiceOrderReviews.AddAsync(review); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:orders")] | ||||
|     [Route("Orders/{orderId:int}/Messages")] | ||||
|     public async Task<IActionResult> GetMessages(int orderId, int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         var messages = _dbContext.SellerServiceOrderMessages | ||||
|             .Include(x=>x.Sender) | ||||
|             .Include(x=>x.Attachments) | ||||
|             .OrderBy(x=>x.SentAt) | ||||
|             .Where(x=>x.SellerServiceOrderId==orderId) | ||||
|             .Skip(offset).Take(pageSize).ToList(); | ||||
|         var result = messages.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message")] | ||||
|     public async Task<IActionResult> Message(int orderId, [FromBody] SellerServiceOrderMessageModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.BuyerId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|         var message = new SellerServiceOrderMessage() | ||||
|         { | ||||
|             SellerServiceOrderId = orderId, | ||||
|             Message = model.Message, | ||||
|             SentAt = DateTime.UtcNow, | ||||
|             SenderId = userId, | ||||
|             Sender = await _dbContext.Users.FirstOrDefaultAsync(x=>x.Id==userId), | ||||
|         }; | ||||
|         var dbMessage = _dbContext.SellerServiceOrderMessages.Add(message).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message/{messageId:int}/Attachment")] | ||||
|     public async Task<IActionResult> MessageAttachment(int orderId, int messageId,IFormFile file) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|          | ||||
|         var message = _dbContext.SellerServiceOrderMessages.First(x=>x.Id==messageId && x.SellerServiceOrderId==orderId); | ||||
|         if(message==null) | ||||
|             return BadRequest("Message does not exist or does not belong to this order."); | ||||
|          | ||||
|         var url = await _storage.UploadImageAsync(file, Guid.NewGuid().ToString()); | ||||
|         var attachment = new SellerServiceOrderMessageAttachment() | ||||
|         { | ||||
|             SellerServiceOrderMessageId = message.Id, | ||||
|             FileReference = url | ||||
|         }; | ||||
|         _dbContext.SellerServiceOrderMessageAttachments.Add(attachment); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|     [HttpGet] | ||||
|     [Authorize("read:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message/{messageId:int}/Attachment")] | ||||
|     public async Task<IActionResult> MessageAttachments(int orderId, int messageId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|          | ||||
|         var message = _dbContext.SellerServiceOrderMessages.Include(x=>x.Attachments) | ||||
|             .First(x=>x.Id==messageId && x.SellerServiceOrderId==orderId); | ||||
|         if(message==null) | ||||
|             return BadRequest("Message does not exist or does not belong to this order."); | ||||
|          | ||||
|         var content = await _storage.DownloadImageAsync(message.Attachments.First().FileReference); | ||||
|         return new FileStreamResult(content, "application/octet-stream"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										285
									
								
								src/ArtPlatform.API/Controllers/SellerOrderController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										285
									
								
								src/ArtPlatform.API/Controllers/SellerOrderController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,285 @@ | ||||
| using ArtPlatform.API.Extensions; | ||||
| using ArtPlatform.API.Models.Order; | ||||
| using ArtPlatform.API.Services.Storage; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| using ArtPlatform.Database.Enums; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class SellerOrderController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
|     private readonly IStorage _storage; | ||||
|      | ||||
|     public SellerOrderController(IStorage storage, ApplicationDbContext dbContext) | ||||
|     { | ||||
|         _storage = storage; | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
| 
 | ||||
|     [HttpGet] | ||||
|     [Route("Orders")] | ||||
|     [Authorize("read:seller-orders")] | ||||
|     public async Task<IActionResult> GetOrders(int offset = 0, int pageSize = 10, EnumOrderStatus? status = null) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var orders = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .Where(x => x.Seller.UserId == userId && status==null ? true : status==x.Status) | ||||
|             .Skip(offset).Take(pageSize).ToListAsync(); | ||||
|         var result = orders.Select(x => x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:seller-orders")] | ||||
|     [Route("Orders/{orderId:int}/Cancel")] | ||||
|     public async Task<IActionResult> CancelOrder(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status== EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.BuyerId!=userId) | ||||
|             return BadRequest("You are not the buyer of this order."); | ||||
|         if(order.Status!=EnumOrderStatus.Completed && order.Status!= EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is not in a cancellable state."); | ||||
|         order.Status = EnumOrderStatus.Cancelled; | ||||
|         order.EndDate = DateTime.UtcNow; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-orders")] | ||||
|     [Route("Orders/{orderId:int}/Accept")] | ||||
|     public async Task<IActionResult> AcceptOrder(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status== EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.BuyerId!=userId) | ||||
|             return BadRequest("You are not the buyer of this order."); | ||||
|         if(order.Status!=EnumOrderStatus.PendingAcceptance) | ||||
|             return BadRequest("Order has already been accepted."); | ||||
|         order.Status = EnumOrderStatus.Waitlist; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-orders")] | ||||
|     [Route("Orders/{orderId:int}/Start")] | ||||
|     public async Task<IActionResult> StartOrder(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status== EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.BuyerId!=userId) | ||||
|             return BadRequest("You are not the buyer of this order."); | ||||
|         if(order.Status!=EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order has already been started."); | ||||
|         order.Status = EnumOrderStatus.DiscussingRequirements; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-orders")] | ||||
|     [Route("Orders/{orderId:int}/AdjustPrice")] | ||||
|     public async Task<IActionResult> AdjustPrice(int orderId,[FromQuery]double price) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status== EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status>EnumOrderStatus.DiscussingRequirements) | ||||
|             return BadRequest("Order requirements and price have already been confirmed."); | ||||
|         if(order.Status<EnumOrderStatus.DiscussingRequirements) | ||||
|             return BadRequest("Order has not been started."); | ||||
|         order.Price = price; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-orders")] | ||||
|     [Route("Orders/{orderId:int}/CompleteRevision")] | ||||
|     public async Task<IActionResult> CompleteRevision(int orderId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status== EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.InProgress) | ||||
|             return BadRequest("Order has not been started."); | ||||
|         if(order.Status>EnumOrderStatus.InProgress) | ||||
|             return BadRequest("Order is pending review already."); | ||||
|         order.Status = EnumOrderStatus.PendingReview; | ||||
|         order = _dbContext.SellerServiceOrders.Update(order).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = order.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:orders")] | ||||
|     [Route("Orders/{orderId:int}/Messages")] | ||||
|     public async Task<IActionResult> GetMessages(int orderId, int offset = 0, int pageSize = 10) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Seller) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         var messages = _dbContext.SellerServiceOrderMessages | ||||
|             .Include(x=>x.Sender) | ||||
|             .Include(x=>x.Attachments) | ||||
|             .OrderBy(x=>x.SentAt) | ||||
|             .Where(x=>x.SellerServiceOrderId==orderId) | ||||
|             .Skip(offset).Take(pageSize).ToList(); | ||||
|         var result = messages.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|     [HttpPost] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message")] | ||||
|     public async Task<IActionResult> Message(int orderId, [FromBody] SellerServiceOrderMessageModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|         var message = new SellerServiceOrderMessage() | ||||
|         { | ||||
|             SellerServiceOrderId = orderId, | ||||
|             Message = model.Message, | ||||
|             SentAt = DateTime.UtcNow, | ||||
|             SenderId = userId, | ||||
|             Sender = await _dbContext.Users.FirstOrDefaultAsync(x=>x.Id==userId), | ||||
|         }; | ||||
|         var dbMessage = _dbContext.SellerServiceOrderMessages.Add(message).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message/{messageId:int}/Attachment")] | ||||
|     public async Task<IActionResult> MessageAttachment(int orderId, int messageId,IFormFile file) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId && x.Seller.UserId==userId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|          | ||||
|         var message = _dbContext.SellerServiceOrderMessages.First(x=>x.Id==messageId && x.SellerServiceOrderId==orderId); | ||||
|         if(message==null) | ||||
|             return BadRequest("Message does not exist or does not belong to this order."); | ||||
|          | ||||
|         var url = await _storage.UploadImageAsync(file, Guid.NewGuid().ToString()); | ||||
|         var attachment = new SellerServiceOrderMessageAttachment() | ||||
|         { | ||||
|             SellerServiceOrderMessageId = message.Id, | ||||
|             FileReference = url | ||||
|         }; | ||||
|         _dbContext.SellerServiceOrderMessageAttachments.Add(attachment); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|     [HttpGet] | ||||
|     [Authorize("read:orders")] | ||||
|     [Route("Orders/{orderId:int}/Message/{messageId:int}/Attachment")] | ||||
|     public async Task<IActionResult> MessageAttachments(int orderId, int messageId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var order = await _dbContext.SellerServiceOrders | ||||
|             .Include(x=>x.Messages) | ||||
|             .Include(x=>x.Seller) | ||||
|             .Include(x=>x.SellerService) | ||||
|             .FirstOrDefaultAsync(x=>x.Id==orderId); | ||||
|         if(order==null) | ||||
|             return NotFound("Order not found."); | ||||
|         if(order.BuyerId!=userId && order.Seller.UserId!=userId) | ||||
|             return BadRequest("You are not the buyer or seller of this order."); | ||||
|         if(order.Status==EnumOrderStatus.Completed || order.Status==EnumOrderStatus.Cancelled) | ||||
|             return BadRequest("Order is already complete."); | ||||
|         if(order.Status<EnumOrderStatus.Waitlist) | ||||
|             return BadRequest("Order is not accepted."); | ||||
|          | ||||
|         var message = _dbContext.SellerServiceOrderMessages.Include(x=>x.Attachments) | ||||
|             .First(x=>x.Id==messageId && x.SellerServiceOrderId==orderId); | ||||
|         if(message==null) | ||||
|             return BadRequest("Message does not exist or does not belong to this order."); | ||||
|         var attachment = message.Attachments.FirstOrDefault(); | ||||
|         if(attachment==null) | ||||
|             return BadRequest("Message does not have an attachment."); | ||||
|         var content = await _storage.DownloadImageAsync(message.Attachments.First().FileReference); | ||||
|         return new FileStreamResult(content, "application/octet-stream"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										181
									
								
								src/ArtPlatform.API/Controllers/SellerProfileController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								src/ArtPlatform.API/Controllers/SellerProfileController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,181 @@ | ||||
| using ArtPlatform.API.Extensions; | ||||
| using ArtPlatform.API.Models.PortfolioModel; | ||||
| using ArtPlatform.API.Models.SellerProfile; | ||||
| using ArtPlatform.API.Services.Storage; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class SellerProfileController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
|     private readonly IStorage _storage; | ||||
| 
 | ||||
| 
 | ||||
|     public SellerProfileController(ApplicationDbContext dbContext, IStorage storage) | ||||
|     { | ||||
|         _storage = storage; | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-profile")] | ||||
|     public async Task<IActionResult> GetSellerProfile() | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var sellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if(sellerProfile==null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var result = sellerProfile.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-profile")] | ||||
|     public async Task<IActionResult> UpdateSellerProfile(SellerProfileModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var updatedSellerProfile = model.ToModel(existingSellerProfile); | ||||
|         updatedSellerProfile = _dbContext.UserSellerProfiles.Update(updatedSellerProfile).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = updatedSellerProfile.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:seller-profile")] | ||||
|     public async Task<IActionResult> RequestSellerProfile(SellerProfileModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|          | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile != null) | ||||
|         { | ||||
|             return Unauthorized("Account is already a seller."); | ||||
|         } | ||||
|          | ||||
|         var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId); | ||||
|         if(sellerProfileRequest!=null) | ||||
|             return BadRequest("Account has already requested to be a seller."); | ||||
|          | ||||
|         sellerProfileRequest = new SellerProfileRequest() | ||||
|         { | ||||
|             Accepted = false, | ||||
|             RequestDate = DateTime.UtcNow, | ||||
|             UserId = userId | ||||
|         }; | ||||
|         _dbContext.SellerProfileRequests.Add(sellerProfileRequest); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-profile")] | ||||
|     [Route("{sellerServiceId:int}/Portfolio/{portfolioId:int}")] | ||||
|     public async Task<IActionResult> GetPortfolio(int sellerServiceId, int portfolioId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
| 
 | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces | ||||
|             .FirstAsync(x => x.SellerProfileId == existingSellerProfile.Id && x.Id==portfolioId); | ||||
|         var content = await _storage.DownloadImageAsync(portfolio.FileReference); | ||||
|         return new FileStreamResult(content, "application/octet-stream"); | ||||
|     } | ||||
| 
 | ||||
|     [HttpGet] | ||||
|     [Route("Portfolio")] | ||||
|     [Authorize("read:seller-profile")] | ||||
|     public async Task<IActionResult> GetPortfolio() | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces.Where(x=>x.SellerProfileId==existingSellerProfile.Id).ToListAsync(); | ||||
|         var result = portfolio.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Route("Portfolio")] | ||||
|     [Authorize("write:seller-profile")] | ||||
|     public async Task<IActionResult> AddPortfolio(IFormFile file) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
| 
 | ||||
|         var url = await _storage.UploadImageAsync(file, Guid.NewGuid().ToString()); | ||||
|         var portfolio = new SellerProfilePortfolioPiece() | ||||
|         { | ||||
|             SellerProfileId = existingSellerProfile.Id, | ||||
|             FileReference = url | ||||
|         }; | ||||
|         portfolio.SellerProfileId = existingSellerProfile.Id; | ||||
|         _dbContext.SellerProfilePortfolioPieces.Add(portfolio); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = portfolio.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:seller-profile")] | ||||
|     [Route("Portfolio/{portfolioId:int}")] | ||||
|     public async Task<IActionResult> DeletePortfolio(int portfolioId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces.FirstOrDefaultAsync(x=>x.Id==portfolioId); | ||||
|         if(portfolio==null) | ||||
|             return NotFound("Portfolio piece not found."); | ||||
|         if(portfolio.SellerProfileId!=existingSellerProfile.Id) | ||||
|             return BadRequest("Portfolio piece does not belong to this seller."); | ||||
|         _dbContext.SellerProfilePortfolioPieces.Remove(portfolio); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										222
									
								
								src/ArtPlatform.API/Controllers/SellerServiceController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								src/ArtPlatform.API/Controllers/SellerServiceController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,222 @@ | ||||
| using ArtPlatform.API.Extensions; | ||||
| using ArtPlatform.API.Models.PortfolioModel; | ||||
| using ArtPlatform.API.Models.SellerService; | ||||
| using ArtPlatform.API.Services.Storage; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class SellerServiceController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
|     private readonly IStorage _storage; | ||||
| 
 | ||||
|     public SellerServiceController(ApplicationDbContext dbContext, IStorage storage) | ||||
|     { | ||||
|         _storage = storage; | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-service")] | ||||
|     public async Task<IActionResult> GetSellerServices(int offset=0, int pageSize=10) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|          | ||||
|         if(seller==null) | ||||
|             return BadRequest("Account is not a seller."); | ||||
| 
 | ||||
|         var sellerServices = await _dbContext.SellerServices.Include(x=>x.Reviews) | ||||
|             .Skip(offset).Take(pageSize).ToListAsync(); | ||||
|         var result = sellerServices.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("Count")] | ||||
|     [Authorize("read:seller-service")] | ||||
|     public async Task<IActionResult> GetSellerServicesCount() | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|          | ||||
|         if(seller==null) | ||||
|             return BadRequest("Account is not a seller."); | ||||
| 
 | ||||
|         var sellerServices = await _dbContext.SellerServices.Include(x => x.Reviews).ToListAsync(); | ||||
|         var result = sellerServices.Count; | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:seller-service")] | ||||
|     public async Task<IActionResult> CreateSellerService([FromBody] SellerServiceCreateModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|          | ||||
|         if(seller==null) | ||||
|             return BadRequest("Account is not a seller."); | ||||
| 
 | ||||
|         var sellerService = new Database.Entities.SellerService() | ||||
|         { | ||||
|             Name = model.Name, | ||||
|             Description = model.Description, | ||||
|             Price = model.Price, | ||||
|             SellerProfileId = seller.Id | ||||
|         }; | ||||
|         sellerService = _dbContext.SellerServices.Add(sellerService).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = sellerService.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpPut] | ||||
|     [Authorize("write:seller-service")] | ||||
|     [Route("{sellerServiceId:int}")] | ||||
|     public async Task<IActionResult> UpdateSellerService([FromBody] SellerServiceUpdateModel model, int sellerServiceId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|          | ||||
|         if(seller==null) | ||||
|             return BadRequest("Account is not a seller."); | ||||
| 
 | ||||
|         var sellerService = await _dbContext.SellerServices.FirstOrDefaultAsync(sellerService=>sellerService.Id==sellerServiceId); | ||||
|          | ||||
|         if(sellerService==null) | ||||
|             return NotFound("Seller service not found."); | ||||
| 
 | ||||
|         sellerService.Name = model.Name; | ||||
|         sellerService.Description = model.Description; | ||||
|         sellerService.Price = model.Price; | ||||
|          | ||||
|         sellerService = _dbContext.SellerServices.Update(sellerService).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = sellerService.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:seller-service")] | ||||
|     [Route("{sellerServiceId:int}")] | ||||
|     public async Task<IActionResult> DeleteSellerService(int sellerServiceId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var seller = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|          | ||||
|         if(seller==null) | ||||
|             return BadRequest("Account is not a seller."); | ||||
| 
 | ||||
|         var sellerService = await _dbContext.SellerServices.FirstOrDefaultAsync(sellerService=>sellerService.Id==sellerServiceId); | ||||
|          | ||||
|         if(sellerService==null) | ||||
|             return NotFound("Seller service not found."); | ||||
| 
 | ||||
|         _dbContext.SellerServices.Remove(sellerService); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     }    | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Route("{sellerServiceId:int}/Portfolio/")] | ||||
|     public async Task<IActionResult> GetPortfolio(int sellerServiceId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces.Where(x=>x.SellerProfileId==existingSellerProfile.Id && x.SellerServiceId==sellerServiceId).ToListAsync(); | ||||
|         var result = portfolio.Select(x=>x.ToModel()).ToList(); | ||||
|         return Ok(result); | ||||
|     } | ||||
| 
 | ||||
|      | ||||
|     [HttpGet] | ||||
|     [Authorize("read:seller-service")] | ||||
|     [Route("{sellerServiceId:int}/Portfolio/{portfolioId:int}")] | ||||
|     public async Task<IActionResult> GetPortfolio(int sellerServiceId, int portfolioId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
| 
 | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces | ||||
|             .FirstAsync(x => x.SellerProfileId == existingSellerProfile.Id | ||||
|                              && x.SellerServiceId == sellerServiceId && x.Id==portfolioId); | ||||
|         var content = await _storage.DownloadImageAsync(portfolio.FileReference); | ||||
|         return new FileStreamResult(content, "application/octet-stream"); | ||||
|     } | ||||
|      | ||||
|     [HttpPost] | ||||
|     [Authorize("write:seller-service")] | ||||
|     [Route("{sellerServiceId:int}/Portfolio")] | ||||
|     public async Task<IActionResult> AddPortfolio(IFormFile file, int sellerServiceId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
| 
 | ||||
|         var url = await _storage.UploadImageAsync(file, Guid.NewGuid().ToString()); | ||||
|         var portfolio = new SellerProfilePortfolioPiece() | ||||
|         { | ||||
|             SellerProfileId = existingSellerProfile.Id, | ||||
|             FileReference = url, | ||||
|             SellerServiceId = sellerServiceId | ||||
|         }; | ||||
|         portfolio.SellerProfileId = existingSellerProfile.Id; | ||||
|         _dbContext.SellerProfilePortfolioPieces.Add(portfolio); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = portfolio.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [HttpDelete] | ||||
|     [Authorize("write:seller-service")] | ||||
|     [Route("{sellerServiceId:int}/Portfolio/{portfolioId:int}")] | ||||
|     public async Task<IActionResult> DeletePortfolio(int portfolioId) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingSellerProfile = await _dbContext.UserSellerProfiles.FirstOrDefaultAsync(sellerProfile=>sellerProfile.UserId==userId); | ||||
|         if (existingSellerProfile == null) | ||||
|         { | ||||
|             var sellerProfileRequest = await _dbContext.SellerProfileRequests.FirstOrDefaultAsync(request=>request.UserId==userId && request.Accepted==false); | ||||
|             if(sellerProfileRequest!=null) | ||||
|                 return BadRequest("Account has requested to be a seller and not been approved yet."); | ||||
|             return Unauthorized("Account is not a seller."); | ||||
|         } | ||||
|         var portfolio = await _dbContext.SellerProfilePortfolioPieces.FirstOrDefaultAsync(x=>x.Id==portfolioId); | ||||
|         if(portfolio==null) | ||||
|             return NotFound("Portfolio piece not found."); | ||||
|         if(portfolio.SellerProfileId!=existingSellerProfile.Id) | ||||
|             return BadRequest("Portfolio piece does not belong to this seller."); | ||||
|         _dbContext.SellerProfilePortfolioPieces.Remove(portfolio); | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         return Ok(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										44
									
								
								src/ArtPlatform.API/Controllers/UserController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/ArtPlatform.API/Controllers/UserController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| using System.Security.Claims; | ||||
| using ArtPlatform.API.Extensions; | ||||
| using ArtPlatform.API.Models.User; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Controllers; | ||||
| 
 | ||||
| [ApiController] | ||||
| [Route("api/[controller]")]
 | ||||
| public class UserController : Controller | ||||
| { | ||||
|     private readonly ApplicationDbContext _dbContext; | ||||
| 
 | ||||
|     public UserController(ApplicationDbContext dbContext) | ||||
|     { | ||||
|         _dbContext = dbContext; | ||||
|     } | ||||
|      | ||||
|     [Authorize("read:user")] | ||||
|     [HttpGet] | ||||
|     public async Task<IActionResult> GetUser() | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var user = await _dbContext.Users.FirstAsync(user=>user.Id==userId); | ||||
|         var result = user.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
|      | ||||
|     [Authorize("write:user")] | ||||
|     [HttpPut] | ||||
|     public async Task<IActionResult> UpdateUser(UserInfoUpdateModel model) | ||||
|     { | ||||
|         var userId = User.GetUserId(); | ||||
|         var existingUser = await _dbContext.Users.FirstAsync(user=>user.Id==userId); | ||||
|         var updatedUser = model.ToEntity(existingUser); | ||||
|         updatedUser = _dbContext.Users.Update(updatedUser).Entity; | ||||
|         await _dbContext.SaveChangesAsync(); | ||||
|         var result = updatedUser.ToModel(); | ||||
|         return Ok(result); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										23
									
								
								src/ArtPlatform.API/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/ArtPlatform.API/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base | ||||
| USER $APP_UID | ||||
| WORKDIR /app | ||||
| EXPOSE 8080 | ||||
| EXPOSE 8081 | ||||
| 
 | ||||
| FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| WORKDIR /src | ||||
| COPY ["ArtPlatform.API/ArtPlatform.API.csproj", "ArtPlatform.API/"] | ||||
| RUN dotnet restore "ArtPlatform.API/ArtPlatform.API.csproj" | ||||
| COPY . . | ||||
| WORKDIR "/src/ArtPlatform.API" | ||||
| RUN dotnet build "ArtPlatform.API.csproj" -c $BUILD_CONFIGURATION -o /app/build | ||||
| 
 | ||||
| FROM build AS publish | ||||
| ARG BUILD_CONFIGURATION=Release | ||||
| RUN dotnet publish "ArtPlatform.API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | ||||
| 
 | ||||
| FROM base AS final | ||||
| WORKDIR /app | ||||
| COPY --from=publish /app/publish . | ||||
| ENTRYPOINT ["dotnet", "ArtPlatform.API.dll"] | ||||
							
								
								
									
										11
									
								
								src/ArtPlatform.API/Extensions/UserExtension.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/ArtPlatform.API/Extensions/UserExtension.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| using System.Security.Claims; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Extensions; | ||||
| 
 | ||||
| public static class UserExtension | ||||
| { | ||||
|     public static string GetUserId(this ClaimsPrincipal user) | ||||
|     { | ||||
|         return user.Claims.First(claim => claim.Type == ClaimTypes.NameIdentifier).Value; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Middleware.Authentication; | ||||
| 
 | ||||
| public class HasScopeHandler : AuthorizationHandler<HasScopeRequirement> | ||||
| { | ||||
|     protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, HasScopeRequirement requirement) | ||||
|     { | ||||
|         // If user does not have the scope claim, get out of here | ||||
|         if (!context.User.HasClaim(c => c.Type == "scope" && c.Issuer == requirement.Issuer)) | ||||
|             return Task.CompletedTask; | ||||
| 
 | ||||
|         // Split the scopes string into an array | ||||
|         var scopes = context.User.FindFirst(c => c.Type == "scope" && c.Issuer == requirement.Issuer).Value.Split(' '); | ||||
| 
 | ||||
|         // Succeed if the scope array contains the required scope | ||||
|         if (scopes.Any(s => s == requirement.Scope)) | ||||
|             context.Succeed(requirement); | ||||
| 
 | ||||
|         return Task.CompletedTask; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Middleware.Authentication; | ||||
| 
 | ||||
| public class HasScopeRequirement : IAuthorizationRequirement | ||||
| { | ||||
|     public string Issuer { get; } | ||||
|     public string Scope { get; } | ||||
| 
 | ||||
|     public HasScopeRequirement(string scope, string issuer) | ||||
|     { | ||||
|         Scope = scope ?? throw new ArgumentNullException(nameof(scope)); | ||||
|         Issuer = issuer ?? throw new ArgumentNullException(nameof(issuer)); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										49
									
								
								src/ArtPlatform.API/Middleware/UserMiddleware.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/ArtPlatform.API/Middleware/UserMiddleware.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | ||||
| using System.Security.Claims; | ||||
| using ArtPlatform.Database; | ||||
| using ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Middleware; | ||||
| 
 | ||||
| 
 | ||||
| public class UserMiddleware | ||||
| { | ||||
|     private readonly RequestDelegate _next; | ||||
| 
 | ||||
|     public UserMiddleware(RequestDelegate next) | ||||
|     { | ||||
|         _next = next; | ||||
|     } | ||||
| 
 | ||||
|     public async Task InvokeAsync(HttpContext context, ApplicationDbContext dbContext) | ||||
|     { | ||||
|         if (context.User.Identity.IsAuthenticated) | ||||
|         { | ||||
|             var userId = context.User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value; | ||||
| 
 | ||||
|             var user = await dbContext.Users.FindAsync(userId); | ||||
| 
 | ||||
|             if (user == null) | ||||
|             { | ||||
|                 user = new User | ||||
|                 { | ||||
|                     Id = userId,  | ||||
|                     DisplayName = context.User.Identity.Name ?? "Anonymous",  | ||||
|                     Biography = string.Empty, | ||||
|                     Email = context.User.Claims.FirstOrDefault(x=>x.Type=="email")?.Value ?? string.Empty, | ||||
|                     FirstName = string.Empty, | ||||
|                     LastName = string.Empty, | ||||
|                     AddressCountry = string.Empty, | ||||
|                     AddressCity = string.Empty, | ||||
|                     AddressStreet = string.Empty, | ||||
|                     AddressHouseNumber = string.Empty, | ||||
|                     AddressPostalCode = string.Empty, | ||||
|                     AddressRegion = string.Empty | ||||
|                 }; | ||||
|                 dbContext.Users.Add(user); | ||||
|                 await dbContext.SaveChangesAsync(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         await _next(context); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| namespace ArtPlatform.API.Models.Discovery; | ||||
| 
 | ||||
| public class DiscoveryReviewModel | ||||
| { | ||||
|     public string WriterDisplayName { get; set; } | ||||
|     public string WriterId { get; set; } | ||||
|     public double Rating { get; set; } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| namespace ArtPlatform.API.Models.Discovery; | ||||
| 
 | ||||
| public class DiscoverySellerModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public List<string> SocialMediaLinks { get; set; } | ||||
|     public string Biography { get; set; } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/ArtPlatform.API/Models/Order/MessageModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/ArtPlatform.API/Models/Order/MessageModel.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| namespace ArtPlatform.API.Models.Order; | ||||
| 
 | ||||
| public class MessageModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string SenderId { get; set; } | ||||
|     public string SenderDisplayName { get; set; } | ||||
|     public string Message { get; set; } | ||||
|     public int[] Attachments { get; set; } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/ArtPlatform.API/Models/Order/MessageModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/ArtPlatform.API/Models/Order/MessageModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| using ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Models.Order; | ||||
| 
 | ||||
| public static class MessageModelExtensions | ||||
| { | ||||
|      | ||||
|     public static MessageModel ToModel(this SellerServiceOrderMessage sellerProfile) | ||||
|     { | ||||
|         return new MessageModel() | ||||
|         { | ||||
|             Id = sellerProfile.Id, | ||||
|             SenderId = sellerProfile.SenderId, | ||||
|             SenderDisplayName = sellerProfile.Sender.DisplayName, | ||||
|             Message = sellerProfile.Message, | ||||
|             Attachments = sellerProfile.Attachments.Select(x=>x.Id).ToArray() | ||||
|         }; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/ArtPlatform.API/Models/Order/OrderModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/ArtPlatform.API/Models/Order/OrderModel.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| using ArtPlatform.Database.Enums; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Models.Order; | ||||
| 
 | ||||
| public class OrderModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string BuyerId { get; set; } | ||||
|     public int SellerServiceId { get; set; } | ||||
|     public int SellerId { get; set; } | ||||
|     public EnumOrderStatus Status { get; set; } | ||||
| 
 | ||||
|     public string StatusLabel => Status.ToString(); | ||||
|     public double Price { get; set; } | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/ArtPlatform.API/Models/Order/OrderModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/ArtPlatform.API/Models/Order/OrderModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| using ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Models.Order; | ||||
| 
 | ||||
| public static class OrderModelExtensions | ||||
| { | ||||
|      | ||||
|     public static OrderModel ToModel(this SellerServiceOrder sellerProfile) | ||||
|     { | ||||
|         return new OrderModel() | ||||
|         { | ||||
|             Id = sellerProfile.Id, | ||||
|             BuyerId = sellerProfile.BuyerId, | ||||
|             SellerServiceId = sellerProfile.SellerServiceId, | ||||
|             SellerId = sellerProfile.SellerId, | ||||
|             Status = sellerProfile.Status, | ||||
|             Price = sellerProfile.Price | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| namespace ArtPlatform.API.Models.Order; | ||||
| 
 | ||||
| public class SellerServiceOrderReviewModel | ||||
| { | ||||
|     public int Rating { get; set; } | ||||
|     public string? Review { get; set; } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| namespace ArtPlatform.API.Models.PortfolioModel; | ||||
| 
 | ||||
| public class PortfolioModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public int? SellerServiceId { get; set; } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| namespace ArtPlatform.API.Models.PortfolioModel; | ||||
| 
 | ||||
| public static class PortfolioModelExtensions | ||||
| { | ||||
|     public static PortfolioModel ToModel(this Database.Entities.SellerProfilePortfolioPiece sellerProfileRequest) | ||||
|     { | ||||
|         return new PortfolioModel() | ||||
|         { | ||||
|             Id = sellerProfileRequest.Id, | ||||
|             SellerServiceId = sellerProfileRequest.SellerServiceId | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| namespace ArtPlatform.API.Models.SellerProfile; | ||||
| 
 | ||||
| public class SellerProfileModel | ||||
| { | ||||
|     public List<string> SocialMediaLinks { get; set; } | ||||
|     public string Biography { get; set; } | ||||
| } | ||||
| @ -0,0 +1,31 @@ | ||||
| using ArtPlatform.API.Models.Discovery; | ||||
| using ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Models.SellerProfile; | ||||
| 
 | ||||
| public static class SellerProfileModelExtensions | ||||
| { | ||||
|     public static SellerProfileModel ToModel(this UserSellerProfile sellerProfile) | ||||
|     { | ||||
|         return new SellerProfileModel() | ||||
|         { | ||||
|             SocialMediaLinks = sellerProfile.SocialMediaLinks, | ||||
|             Biography = sellerProfile.Biography | ||||
|         }; | ||||
|     } | ||||
|     public static DiscoverySellerModel ToDiscoveryModel(this UserSellerProfile sellerProfile) | ||||
|     { | ||||
|         return new DiscoverySellerModel() | ||||
|         { | ||||
|             Id = sellerProfile.Id, | ||||
|             SocialMediaLinks = sellerProfile.SocialMediaLinks, | ||||
|             Biography = sellerProfile.Biography | ||||
|         }; | ||||
|     } | ||||
|     public static UserSellerProfile ToModel(this SellerProfileModel sellerProfile, UserSellerProfile existingSellerProfile) | ||||
|     { | ||||
|         existingSellerProfile.SocialMediaLinks = sellerProfile.SocialMediaLinks; | ||||
|         existingSellerProfile.Biography = sellerProfile.Biography; | ||||
|         return existingSellerProfile; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,11 @@ | ||||
| namespace ArtPlatform.API.Models.SellerProfileRequest; | ||||
| 
 | ||||
| public class SellerProfileRequestModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public DateTime RequestDate { get; set; } | ||||
|     public string UserId { get; set; } | ||||
|     public bool Accepted { get; set; } | ||||
|      | ||||
|     public virtual Database.Entities.User User { get; set; } = null!; | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| namespace ArtPlatform.API.Models.SellerProfileRequest; | ||||
| 
 | ||||
| public static class SellerProfileRequestModelExtensions | ||||
| { | ||||
|     public static SellerProfileRequestModel ToModel(this Database.Entities.SellerProfileRequest sellerProfileRequest) | ||||
|     { | ||||
|         return new SellerProfileRequestModel() | ||||
|         { | ||||
|             Id = sellerProfileRequest.Id, | ||||
|             UserId = sellerProfileRequest.UserId, | ||||
|             RequestDate = sellerProfileRequest.RequestDate, | ||||
|             Accepted = sellerProfileRequest.Accepted | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| namespace ArtPlatform.API.Models.SellerService; | ||||
| 
 | ||||
| public class SellerServiceCreateModel | ||||
| { | ||||
|     public string Name { get; set; } | ||||
|     public string Description { get; set; } | ||||
|     public double Price { get; set; } | ||||
| } | ||||
| @ -0,0 +1,11 @@ | ||||
| namespace ArtPlatform.API.Models.SellerService; | ||||
| 
 | ||||
| public class SellerServiceModel | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string Name { get; set; } = null!; | ||||
|     public string Description { get; set; } = null!; | ||||
|     public double Price { get; set; } | ||||
|     public double AverageRating { get; set; } | ||||
|     public int NumberOfRatings { get; set; } | ||||
| } | ||||
| @ -0,0 +1,26 @@ | ||||
| namespace ArtPlatform.API.Models.SellerService; | ||||
| 
 | ||||
| public static class SellerServiceModelExtensions | ||||
| { | ||||
|      | ||||
|     public static SellerServiceModel ToModel(this Database.Entities.SellerService sellerProfileRequest) | ||||
|     { | ||||
|         double avgRating = 0; | ||||
|         int reviewCount = 0; | ||||
|         var ratings = sellerProfileRequest.Reviews; | ||||
|         if (ratings.Any()) | ||||
|         { | ||||
|             avgRating = ratings.Average(x => x.Rating); | ||||
|             reviewCount = sellerProfileRequest.Reviews.Count; | ||||
|         } | ||||
|         return new SellerServiceModel() | ||||
|         { | ||||
|             Id = sellerProfileRequest.Id, | ||||
|             Name = sellerProfileRequest.Name, | ||||
|             Description = sellerProfileRequest.Description, | ||||
|             Price = sellerProfileRequest.Price, | ||||
|             AverageRating = avgRating, | ||||
|             NumberOfRatings = reviewCount | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| namespace ArtPlatform.API.Models.SellerService; | ||||
| 
 | ||||
| public class SellerServiceUpdateModel | ||||
| { | ||||
|     public string Name { get; set; } | ||||
|     public string Description { get; set; } | ||||
|     public double Price { get; set; } | ||||
| } | ||||
							
								
								
									
										9
									
								
								src/ArtPlatform.API/Models/User/UserInfoModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/ArtPlatform.API/Models/User/UserInfoModel.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| namespace ArtPlatform.API.Models.User; | ||||
| 
 | ||||
| public class UserInfoModel | ||||
| { | ||||
|     public string Id { get; set; } = string.Empty; | ||||
|     public string DisplayName { get; init; } = string.Empty; | ||||
|     public string Biography { get; init; } = string.Empty; | ||||
|     public string Email { get; init; } = string.Empty; | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/ArtPlatform.API/Models/User/UserInfoModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/ArtPlatform.API/Models/User/UserInfoModelExtensions.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| namespace ArtPlatform.API.Models.User; | ||||
| 
 | ||||
| public static class UserInfoModelExtensions | ||||
| { | ||||
|     public static UserInfoModel ToModel(this Database.Entities.User user) | ||||
|     { | ||||
|         return new() | ||||
|         { | ||||
|             Id = user.Id, | ||||
|             DisplayName = user.DisplayName, | ||||
|             Biography = user.Biography, | ||||
|             Email = user.Email | ||||
|         }; | ||||
|     } | ||||
|     public static Database.Entities.User ToEntity(this UserInfoUpdateModel user, Database.Entities.User existingUser) | ||||
|     { | ||||
|         existingUser.DisplayName = user.DisplayName; | ||||
|         existingUser.Biography = user.Biography; | ||||
|         existingUser.Email = user.Email; | ||||
|         return existingUser; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/ArtPlatform.API/Models/User/UserInfoUpdateModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/ArtPlatform.API/Models/User/UserInfoUpdateModel.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| namespace ArtPlatform.API.Models.User; | ||||
| 
 | ||||
| public class UserInfoUpdateModel | ||||
| { | ||||
|     public string DisplayName { get; init; } = string.Empty; | ||||
|     public string Biography { get; init; } = string.Empty; | ||||
|     public string Email { get; init; } = string.Empty; | ||||
| } | ||||
							
								
								
									
										156
									
								
								src/ArtPlatform.API/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								src/ArtPlatform.API/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,156 @@ | ||||
| using System.Reflection; | ||||
| using System.Security.Claims; | ||||
| using ArtPlatform.API.Middleware; | ||||
| using ArtPlatform.API.Middleware.Authentication; | ||||
| using ArtPlatform.API.Services.Storage; | ||||
| using ArtPlatform.Database; | ||||
| using Auth0.AspNetCore.Authentication; | ||||
| using Microsoft.AspNetCore.Authentication.JwtBearer; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.IdentityModel.Tokens; | ||||
| using Microsoft.OpenApi.Models; | ||||
| 
 | ||||
| var builder = WebApplication.CreateBuilder(args); | ||||
| 
 | ||||
| // Add services to the container. | ||||
| // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | ||||
| 
 | ||||
| builder.Services.AddSingleton<IStorage,ImgCdnProvider>(); | ||||
| 
 | ||||
| 
 | ||||
| builder.Services.AddHttpContextAccessor(); | ||||
| builder.Services.AddEndpointsApiExplorer(); | ||||
| builder.Services.AddSingleton<ApplicationDbContext>(); | ||||
| builder.Services.AddSwaggerGen(options => | ||||
| { | ||||
|     options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo | ||||
|     { | ||||
|         Title = "API Documentation", | ||||
|         Version = "v1.0", | ||||
|         Description = "" | ||||
|     }); | ||||
|     options.ResolveConflictingActions(x => x.First()); | ||||
|     options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme | ||||
|     { | ||||
|         Type = SecuritySchemeType.OAuth2, | ||||
|         BearerFormat = "JWT", | ||||
|         Flows = new OpenApiOAuthFlows | ||||
|         { | ||||
|             Implicit  = new OpenApiOAuthFlow | ||||
|             { | ||||
|                 TokenUrl = new Uri($"{builder.Configuration.GetValue<string>("Auth0:Domain")}oauth/token"), | ||||
|                 AuthorizationUrl = new Uri($"{builder.Configuration.GetValue<string>("Auth0:Domain")}authorize?audience={builder.Configuration.GetValue<string>("Auth0:Audience")}"), | ||||
|                 Scopes = new Dictionary<string, string> | ||||
|                 { | ||||
|                     { "openid", "OpenId" }, | ||||
|                     { "email", "Email" }, | ||||
|                     { "profile", "Profile" }, | ||||
|                     { "read:user",  "Read your profile information." }, | ||||
|                     { "write:user", "Update your profile information." }, | ||||
|                     { "read:billing-information", "Read your billing information." }, | ||||
|                     { "write:billing-information", "Update your billing information." }, | ||||
|                     { "read:seller-profile", "Read your seller profile information."}, | ||||
|                     { "write:seller-profile", "Update your seller profile information."}, | ||||
|                     { "write:seller-profile-request", "Accept seller profile requests."}, | ||||
|                     { "read:seller-profile-request", "Read seller profile requests."}, | ||||
|                     { "read:seller-service", "Read services on your seller profile."}, | ||||
|                     { "write:seller-service", "Update services on your seller profile."}, | ||||
|                     { "write:orders", "Create new orders and take action against existing ones."}, | ||||
|                     { "read:orders", "View your orders."}, | ||||
|                     { "read:seller-orders", "View orders on your seller profile."}, | ||||
|                     { "write:seller-orders", "Update orders on your seller profile."} | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
|     options.AddSecurityRequirement(new OpenApiSecurityRequirement | ||||
|     { | ||||
|         { | ||||
|             new OpenApiSecurityScheme | ||||
|             { | ||||
|                 Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" } | ||||
|             }, | ||||
|             new[] { "openid", "email", "profile" } | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|     var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; | ||||
|     var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); | ||||
|     options.IncludeXmlComments(xmlPath); | ||||
| 
 | ||||
| }); | ||||
| 
 | ||||
| builder.Services.AddControllers() | ||||
|     .AddJsonOptions(options=> | ||||
|         options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles | ||||
|         ); | ||||
| 
 | ||||
| builder.Services.AddAuthentication(options => | ||||
| { | ||||
|     options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; | ||||
|     options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; | ||||
| }).AddJwtBearer(options => | ||||
| { | ||||
|     options.Authority = $"{builder.Configuration.GetValue<string>("Auth0:Domain")}"; | ||||
|     options.Audience = $"{builder.Configuration.GetValue<string>("Auth0:Audience")}"; | ||||
| }); | ||||
| 
 | ||||
| builder.Services.AddAuthorization(options => | ||||
| { | ||||
|     options.AddPolicy("read:user", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:user", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:user", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:user", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("read:billing-information", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:billing-information", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:billing-information", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:billing-information", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("read:seller-profile", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:seller-profile", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:seller-profile", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:seller-profile", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("read:seller-profile-request", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:seller-profile-request", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:seller-profile-request", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:seller-profile-request", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("read:seller-service", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:seller-service", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:seller-service", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:seller-service", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("write:orders", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:orders", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("read:orders", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:orders", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|      | ||||
|     options.AddPolicy("read:seller-orders", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("read:seller-orders", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
|     options.AddPolicy("write:seller-orders", policy => policy.Requirements.Add(new  | ||||
|         HasScopeRequirement("write:seller-orders", builder.Configuration.GetValue<string>("Auth0:Domain")))); | ||||
| }); | ||||
| 
 | ||||
| builder.Services.AddSingleton<IAuthorizationHandler, HasScopeHandler>(); | ||||
| 
 | ||||
| 
 | ||||
| var app = builder.Build(); | ||||
| app.UseSwagger(); | ||||
| app.UseSwaggerUI(settings => | ||||
| { | ||||
|     if (app.Environment.IsDevelopment()) | ||||
|     { | ||||
|         settings.OAuthClientId(builder.Configuration.GetValue<string>("Auth0:ClientId")); | ||||
|         settings.OAuthClientSecret(builder.Configuration.GetValue<string>("Auth0:ClientSecret")); | ||||
|         settings.OAuthUsePkce(); | ||||
|     }    | ||||
| }); | ||||
| app.UseStaticFiles(); | ||||
| app.UseHttpsRedirection(); | ||||
| app.UseAuthentication(); | ||||
| app.UseMiddleware<UserMiddleware>(); | ||||
| app.UseAuthorization(); | ||||
| app.MapControllers(); | ||||
| app.Run(); | ||||
| @ -1,20 +1,30 @@ | ||||
| { | ||||
|   "$schema": "https://json.schemastore.org/launchsettings.json", | ||||
|   "$schema": "http://json.schemastore.org/launchsettings.json", | ||||
|   "iisSettings": { | ||||
|     "windowsAuthentication": false, | ||||
|     "anonymousAuthentication": true, | ||||
|     "iisExpress": { | ||||
|       "applicationUrl": "http://localhost:59643", | ||||
|       "sslPort": 44359 | ||||
|       "applicationUrl": "http://localhost:35549", | ||||
|       "sslPort": 44383 | ||||
|     } | ||||
|   }, | ||||
|   "profiles": { | ||||
|     "ArtPlatform.Api": { | ||||
|     "http": { | ||||
|       "commandName": "Project", | ||||
|       "dotnetRunMessages": true, | ||||
|       "launchBrowser": true, | ||||
|       "launchUrl": "swagger", | ||||
|       "applicationUrl": "https://localhost:7159;http://localhost:5201", | ||||
|       "applicationUrl": "http://localhost:5290", | ||||
|       "environmentVariables": { | ||||
|         "ASPNETCORE_ENVIRONMENT": "Development" | ||||
|       } | ||||
|     }, | ||||
|     "https": { | ||||
|       "commandName": "Project", | ||||
|       "dotnetRunMessages": true, | ||||
|       "launchBrowser": true, | ||||
|       "launchUrl": "swagger", | ||||
|       "applicationUrl": "https://localhost:7148;http://localhost:5290", | ||||
|       "environmentVariables": { | ||||
|         "ASPNETCORE_ENVIRONMENT": "Development" | ||||
|       } | ||||
							
								
								
									
										7
									
								
								src/ArtPlatform.API/Services/Storage/IStorage.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/ArtPlatform.API/Services/Storage/IStorage.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| namespace ArtPlatform.API.Services.Storage; | ||||
| 
 | ||||
| public interface IStorage | ||||
| { | ||||
|     public Task<string> UploadImageAsync(IFormFile file, string fileName); | ||||
|     public Task<Stream> DownloadImageAsync(string fileRefrence); | ||||
| } | ||||
							
								
								
									
										53
									
								
								src/ArtPlatform.API/Services/Storage/ImgCdnProvider.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/ArtPlatform.API/Services/Storage/ImgCdnProvider.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| using System.Net.Http; | ||||
| using System.Text.Json; | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| 
 | ||||
| namespace ArtPlatform.API.Services.Storage | ||||
| { | ||||
|     public class ImgCdnProvider : IStorage | ||||
|     { | ||||
|         private readonly HttpClient _client; | ||||
|         private const string ApiKey = "5386e05a3562c7a8f984e73401540836"; | ||||
| 
 | ||||
|         public ImgCdnProvider() | ||||
|         { | ||||
|             _client = new HttpClient { BaseAddress = new Uri("https://imgcdn.dev/") }; | ||||
|         } | ||||
| 
 | ||||
|         public async Task<string> UploadImageAsync(IFormFile file, string fileName) | ||||
|         { | ||||
|             using var content = new MultipartFormDataContent(); | ||||
|             content.Add(new StringContent(ApiKey), "key"); | ||||
| 
 | ||||
|             using var fileStream = file.OpenReadStream(); | ||||
|             content.Add(new StreamContent(fileStream), "source", fileName); | ||||
| 
 | ||||
|             var response = await _client.PostAsync("api/1/upload", content); | ||||
| 
 | ||||
|             if (!response.IsSuccessStatusCode) | ||||
|             { | ||||
|                 throw new Exception("Failed to upload image."); | ||||
|             } | ||||
| 
 | ||||
|             var responseContent = await response.Content.ReadAsStringAsync(); | ||||
|             var jsonResponse = JsonDocument.Parse(responseContent); | ||||
|             var imageUrl = jsonResponse.RootElement.GetProperty("image").GetProperty("url").GetString(); | ||||
| 
 | ||||
|             return imageUrl; | ||||
|         } | ||||
| 
 | ||||
|         public async Task<Stream> DownloadImageAsync(string fileReference) | ||||
|         { | ||||
|             var response = await _client.GetAsync(fileReference); | ||||
| 
 | ||||
|             if (!response.IsSuccessStatusCode) | ||||
|             { | ||||
|                 throw new Exception("Failed to download image."); | ||||
|             } | ||||
| 
 | ||||
|             var stream = await response.Content.ReadAsStreamAsync(); | ||||
|             return stream; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/ArtPlatform.API/appsettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/ArtPlatform.API/appsettings.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| { | ||||
|   "Auth0": { | ||||
|     "Domain": "https://dev-12mb5yq82dow1twh.us.auth0.com/", | ||||
|     "Audience": "https://api.artplatform.com", | ||||
|     "ClientId": "19GWUL7fWFQWEpdFFtlgv2x3kqfSa0ES", | ||||
|     "ClientSecret": "VX5LKeGHeaqKsgNz8Kn1gQ7MSHmwrXJdC2DMjVY82_YHjiRqdPrVNpFFkXBZy8yh" | ||||
|   }, | ||||
|   "Logging": { | ||||
|     "LogLevel": { | ||||
|       "Default": "Information", | ||||
|       "Microsoft.AspNetCore": "Warning" | ||||
|     } | ||||
|   }, | ||||
|   "AllowedHosts": "*" | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <OutputType>Exe</OutputType> | ||||
|         <TargetFramework>net8.0</TargetFramework> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <Nullable>enable</Nullable> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <ProjectReference Include="..\ArtPlatform.Database\ArtPlatform.Database.csproj" /> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
							
								
								
									
										3
									
								
								src/ArtPlatform.Database.Migrator/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/ArtPlatform.Database.Migrator/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| // See https://aka.ms/new-console-template for more information | ||||
| 
 | ||||
| Console.WriteLine("Hello, World!"); | ||||
| @ -0,0 +1,20 @@ | ||||
| 
 | ||||
| using Microsoft.Extensions.Configuration; | ||||
| 
 | ||||
| namespace ArtPlatform.Database; | ||||
| 
 | ||||
| public class ApplicationDatabaseConfigurationModel | ||||
| { | ||||
|     private readonly IConfiguration _configuration; | ||||
|      | ||||
|     public ApplicationDatabaseConfigurationModel(IConfiguration configuration) | ||||
|     { | ||||
|         _configuration = configuration; | ||||
|     } | ||||
|      | ||||
|     public string Host => _configuration?.GetValue<string>("Database:Host") ?? "localhost"; | ||||
|     public int Port => _configuration?.GetValue<int>("Database:Port") ?? 5432; | ||||
|     public string Database => _configuration?.GetValue<string>("Database:Database") ?? "artplatform"; | ||||
|     public string Username => _configuration?.GetValue<string>("Database:username") ?? "sa"; | ||||
|     public string Password => _configuration?.GetValue<string>("Database:password") ?? "P@ssw0rd"; | ||||
| } | ||||
							
								
								
									
										43
									
								
								src/ArtPlatform.Database/ApplicationDbContext.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/ArtPlatform.Database/ApplicationDbContext.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| using ArtPlatform.Database.Entities; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Npgsql; | ||||
| 
 | ||||
| namespace ArtPlatform.Database; | ||||
| 
 | ||||
| public class ApplicationDbContext:DbContext | ||||
| { | ||||
|     private readonly ApplicationDatabaseConfigurationModel _configuration; | ||||
|      | ||||
|     // public ApplicationDbContext(ApplicationDatabaseConfigurationModel configuration, DbContextOptions<ApplicationDbContext> options):base(options) | ||||
|     // { | ||||
|     //     _configuration = configuration; | ||||
|     // } | ||||
|      | ||||
|      | ||||
|     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) | ||||
|     { | ||||
|         var connectionStringBuilder = new NpgsqlConnectionStringBuilder() | ||||
|         { | ||||
|             Host = _configuration?.Host ?? "localhost", | ||||
|             Port = _configuration?.Port ?? 5432, | ||||
|             Database = _configuration?.Database ?? "artplatform", | ||||
|             Username = _configuration?.Username ?? "sa", | ||||
|             Password = _configuration?.Password ?? "P@ssw0rd" | ||||
|         }; | ||||
|         optionsBuilder.UseNpgsql(connectionStringBuilder.ConnectionString); | ||||
|         base.OnConfiguring(optionsBuilder); | ||||
|     } | ||||
|      | ||||
|     #region DB Sets | ||||
| 
 | ||||
|     public DbSet<User> Users { get; set; } = null!; | ||||
|     public DbSet<UserSellerProfile> UserSellerProfiles { get; set; }= null!; | ||||
|     public DbSet<SellerProfileRequest> SellerProfileRequests { get; set; }= null!; | ||||
|     public DbSet<SellerProfilePortfolioPiece> SellerProfilePortfolioPieces { get; set; }= null!; | ||||
|     public DbSet<SellerService> SellerServices { get; set; }= null!; | ||||
|     public DbSet<SellerServiceOrder> SellerServiceOrders { get; set; }= null!; | ||||
|     public DbSet<SellerServiceOrderMessage> SellerServiceOrderMessages { get; set; }= null!; | ||||
|     public DbSet<SellerServiceOrderMessageAttachment> SellerServiceOrderMessageAttachments { get; set; }= null!; | ||||
|     public DbSet<SellerServiceOrderReview> SellerServiceOrderReviews { get; set; }= null!; | ||||
|     #endregion | ||||
| } | ||||
							
								
								
									
										21
									
								
								src/ArtPlatform.Database/ArtPlatform.Database.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/ArtPlatform.Database/ArtPlatform.Database.csproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|     <PropertyGroup> | ||||
|         <TargetFramework>net8.0</TargetFramework> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <Nullable>enable</Nullable> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
|     <ItemGroup> | ||||
|       <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" /> | ||||
|       <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.1"> | ||||
|         <PrivateAssets>all</PrivateAssets> | ||||
|         <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
|       </PackageReference> | ||||
|       <PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" /> | ||||
|       <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1" /> | ||||
|       <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" /> | ||||
|       <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" /> | ||||
|     </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
| @ -0,0 +1,11 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerProfilePortfolioPiece | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public int SellerProfileId { get; set; } | ||||
|     public string? FileReference { get; set; } | ||||
|     public int? SellerServiceId { get; set; } | ||||
|     public virtual SellerService SellerService { get; set; } = null!; | ||||
|     public virtual UserSellerProfile SellerProfile { get; set; } = null!; | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/ArtPlatform.Database/Entities/SellerProfileRequest.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/ArtPlatform.Database/Entities/SellerProfileRequest.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerProfileRequest | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string UserId { get; set; } = null!; | ||||
|     public DateTime RequestDate { get; set; } | ||||
|     public DateTime? AcceptedDate { get; set; } | ||||
|     public bool Accepted { get; set; } | ||||
|      | ||||
|     public virtual User User { get; set; } = null!; | ||||
| } | ||||
							
								
								
									
										14
									
								
								src/ArtPlatform.Database/Entities/SellerService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/ArtPlatform.Database/Entities/SellerService.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerService | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public int SellerProfileId { get; set; } | ||||
|     public string Name { get; set; } = null!; | ||||
|     public string Description { get; set; } = null!; | ||||
|     public double Price { get; set; } | ||||
| 
 | ||||
|     public virtual ICollection<SellerProfilePortfolioPiece> PortfolioPieces { get; set; } = new List<SellerProfilePortfolioPiece>(); | ||||
|     public virtual ICollection<SellerServiceOrderReview> Reviews { get; set; } = new List<SellerServiceOrderReview>(); | ||||
|     public virtual UserSellerProfile SellerProfile { get; set; } = null!; | ||||
| } | ||||
							
								
								
									
										23
									
								
								src/ArtPlatform.Database/Entities/SellerServiceOrder.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/ArtPlatform.Database/Entities/SellerServiceOrder.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| using ArtPlatform.Database.Enums; | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerServiceOrder | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string BuyerId { get; set; } | ||||
|     public int SellerServiceId { get; set; } | ||||
|     public int SellerId { get; set; } | ||||
|     public EnumOrderStatus Status { get; set; } | ||||
|     public double Price { get; set; } | ||||
|     public DateTime CreatedDate { get; set; } | ||||
|     public DateTime? TermsAcceptedDate { get; set; } | ||||
|     public DateTime? EndDate { get; set; } | ||||
|      | ||||
|     public virtual User Buyer { get; set; } = null!; | ||||
|     public virtual SellerService SellerService { get; set; } = null!; | ||||
|     public virtual UserSellerProfile Seller { get; set; } = null!; | ||||
| 
 | ||||
|     public virtual ICollection<SellerServiceOrderReview> Reviews { get; set; } = new List<SellerServiceOrderReview>(); | ||||
|     public virtual ICollection<SellerServiceOrderMessage> Messages { get; set; } = new List<SellerServiceOrderMessage>(); | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerServiceOrderMessage | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public int SellerServiceOrderId { get; set; } | ||||
|     public string SenderId { get; set; } | ||||
|     public string Message { get; set; } = null!; | ||||
|     public DateTime SentAt { get; set; } | ||||
|      | ||||
|     public virtual SellerServiceOrder SellerServiceOrder { get; set; } = null!; | ||||
|     public virtual User Sender { get; set; } = null!; | ||||
|     public virtual ICollection<SellerServiceOrderMessageAttachment> Attachments { get; set; } = null!; | ||||
| } | ||||
| @ -0,0 +1,10 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerServiceOrderMessageAttachment | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public int SellerServiceOrderMessageId { get; set; } | ||||
|     public string FileReference { get; set; } = null!; | ||||
|      | ||||
|     public virtual SellerServiceOrderMessage SellerServiceOrderMessage { get; set; } = null!; | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerServiceOrderMessageModel | ||||
| { | ||||
|     public string Message { get; set; } | ||||
| } | ||||
| @ -0,0 +1,16 @@ | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public class SellerServiceOrderReview | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     public string ReviewerId { get; set; } | ||||
|     public int SellerServiceOrderId { get; set; } | ||||
|     public int SellerServiceId { get; set; } | ||||
|     public DateTime ReviewDate { get; set; } | ||||
|     public string? Review { get; set; } | ||||
|     public int Rating { get; set; } | ||||
|      | ||||
|     public virtual User Reviewer { get; set; } = null!; | ||||
|     public virtual SellerServiceOrder SellerServiceOrder { get; set; } = null!; | ||||
|     public virtual SellerService SellerService { get; set; } = null!; | ||||
| } | ||||
							
								
								
									
										28
									
								
								src/ArtPlatform.Database/Entities/User.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/ArtPlatform.Database/Entities/User.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| using System.Text.Json.Serialization; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| [PrimaryKey(nameof(Id))] | ||||
| public record User | ||||
| { | ||||
|     public string Id { get; set; } | ||||
|     public string DisplayName { get; set; } = null!; | ||||
|     public string Biography { get; set; } = null!; | ||||
|     public string Email { get; set; } = null!; | ||||
|     public int? UserSellerProfileId { get; set; } | ||||
|      | ||||
|     #region Billing Information | ||||
|     public string FirstName { get; set; } = null!; | ||||
|     public string LastName { get; set; } = null!; | ||||
|     public string AddressCountry { get; set; } = null!; | ||||
|     public string AddressCity { get; set; } = null!; | ||||
|     public string AddressStreet { get; set; } = null!; | ||||
|     public string AddressHouseNumber { get; set; } = null!; | ||||
|     public string AddressPostalCode { get; set; } = null!; | ||||
|     public string AddressRegion { get; set; } = null!; | ||||
|     #endregion | ||||
|      | ||||
|     [JsonIgnore] public virtual UserSellerProfile? UserSellerProfile { get; set; } | ||||
|     [JsonIgnore] public virtual ICollection<SellerServiceOrder> Orders { get; set; } | ||||
| } | ||||
							
								
								
									
										18
									
								
								src/ArtPlatform.Database/Entities/UserSellerProfile.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/ArtPlatform.Database/Entities/UserSellerProfile.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Entities; | ||||
| 
 | ||||
| public record UserSellerProfile | ||||
| { | ||||
|     public int Id { get; set; } | ||||
|     [ForeignKey(nameof(User))] | ||||
|     public string UserId { get; set; } | ||||
|     public string Biography { get; set; } | ||||
|     public List<string> SocialMediaLinks { get; set; } = new(); | ||||
|     public bool AgeRestricted { get; set; } | ||||
|      | ||||
|     public virtual User User { get; set; } = null!; | ||||
| 
 | ||||
|     public virtual ICollection<SellerService> SellerServices { get; set; } = new List<SellerService>(); | ||||
|     public virtual ICollection<SellerProfilePortfolioPiece> PortfolioPieces { get; set; } = new List<SellerProfilePortfolioPiece>(); | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/ArtPlatform.Database/Enums/EnumOrderStatus.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/ArtPlatform.Database/Enums/EnumOrderStatus.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| namespace ArtPlatform.Database.Enums; | ||||
| 
 | ||||
| public enum EnumOrderStatus | ||||
| { | ||||
|     PendingAcceptance, | ||||
|     Waitlist, | ||||
|     DiscussingRequirements, | ||||
|     InProgress, | ||||
|     PendingReview, | ||||
|     Completed, | ||||
|     Cancelled | ||||
| } | ||||
							
								
								
									
										477
									
								
								src/ArtPlatform.Database/Migrations/20240127055416_Initial.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										477
									
								
								src/ArtPlatform.Database/Migrations/20240127055416_Initial.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,477 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127055416_Initial")] | ||||
|     partial class Initial | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerConfiguredSetting", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("SellerSettingId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("UserSellerSettingId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerSettingId"); | ||||
| 
 | ||||
|                     b.HasIndex("UserSellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerConfiguredSettings"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<decimal?>("DepositAmount") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<bool>("DepositRequired") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerSetting", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("DefaultValue") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("SellerSettings"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerConfiguredSetting", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerSetting", "SellerSetting") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerSettingId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "UserSellerProfile") | ||||
|                         .WithMany("ConfiguredSettings") | ||||
|                         .HasForeignKey("UserSellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerSetting"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("ConfiguredSettings"); | ||||
| 
 | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										345
									
								
								src/ArtPlatform.Database/Migrations/20240127055416_Initial.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								src/ArtPlatform.Database/Migrations/20240127055416_Initial.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,345 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class Initial : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerSettings", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     Name = table.Column<string>(type: "text", nullable: false), | ||||
|                     Description = table.Column<string>(type: "text", nullable: false), | ||||
|                     DefaultValue = table.Column<string>(type: "text", nullable: true) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerSettings", x => x.Id); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "Users", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<string>(type: "text", nullable: false), | ||||
|                     DisplayName = table.Column<string>(type: "text", nullable: false), | ||||
|                     Biography = table.Column<string>(type: "text", nullable: false), | ||||
|                     Email = table.Column<string>(type: "text", nullable: false), | ||||
|                     UserSellerProfileId = table.Column<int>(type: "integer", nullable: true), | ||||
|                     FirstName = table.Column<string>(type: "text", nullable: false), | ||||
|                     LastName = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressCountry = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressCity = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressStreet = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressHouseNumber = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressPostalCode = table.Column<string>(type: "text", nullable: false), | ||||
|                     AddressRegion = table.Column<string>(type: "text", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_Users", x => x.Id); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "UserSellerProfiles", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     UserId = table.Column<string>(type: "text", nullable: false), | ||||
|                     AgeRestricted = table.Column<bool>(type: "boolean", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_UserSellerProfiles", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_UserSellerProfiles_Users_UserId", | ||||
|                         column: x => x.UserId, | ||||
|                         principalTable: "Users", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerConfiguredSettings", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     UserSellerProfileId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     UserSellerSettingId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     SellerSettingId = table.Column<int>(type: "integer", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerConfiguredSettings", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerConfiguredSettings_SellerSettings_SellerSettingId", | ||||
|                         column: x => x.SellerSettingId, | ||||
|                         principalTable: "SellerSettings", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerConfiguredSettings_UserSellerProfiles_UserSellerProfi~", | ||||
|                         column: x => x.UserSellerProfileId, | ||||
|                         principalTable: "UserSellerProfiles", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerProfilePortfolioPieces", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     SellerProfileId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     Name = table.Column<string>(type: "text", nullable: false), | ||||
|                     Description = table.Column<string>(type: "text", nullable: false), | ||||
|                     FileReference = table.Column<string>(type: "text", nullable: true) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerProfilePortfolioPieces", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerProfilePortfolioPieces_UserSellerProfiles_SellerProfi~", | ||||
|                         column: x => x.SellerProfileId, | ||||
|                         principalTable: "UserSellerProfiles", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerServices", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     SellerProfileId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     Name = table.Column<string>(type: "text", nullable: false), | ||||
|                     Description = table.Column<string>(type: "text", nullable: false), | ||||
|                     Price = table.Column<decimal>(type: "numeric", nullable: false), | ||||
|                     DepositRequired = table.Column<bool>(type: "boolean", nullable: false), | ||||
|                     DepositAmount = table.Column<decimal>(type: "numeric", nullable: true) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerServices", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServices_UserSellerProfiles_SellerProfileId", | ||||
|                         column: x => x.SellerProfileId, | ||||
|                         principalTable: "UserSellerProfiles", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerServiceOrders", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     BuyerId = table.Column<string>(type: "text", nullable: false), | ||||
|                     SellerServiceId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     Status = table.Column<int>(type: "integer", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerServiceOrders", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrders_SellerServices_SellerServiceId", | ||||
|                         column: x => x.SellerServiceId, | ||||
|                         principalTable: "SellerServices", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrders_Users_BuyerId", | ||||
|                         column: x => x.BuyerId, | ||||
|                         principalTable: "Users", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerServiceOrderMessages", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     SellerServiceOrderId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     SenderId = table.Column<string>(type: "text", nullable: false), | ||||
|                     Message = table.Column<string>(type: "text", nullable: false), | ||||
|                     SentAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerServiceOrderMessages", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrderMessages_SellerServiceOrders_SellerServic~", | ||||
|                         column: x => x.SellerServiceOrderId, | ||||
|                         principalTable: "SellerServiceOrders", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrderMessages_Users_SenderId", | ||||
|                         column: x => x.SenderId, | ||||
|                         principalTable: "Users", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerServiceOrderReviews", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     ReviewerId = table.Column<string>(type: "text", nullable: false), | ||||
|                     SellerServiceOrderId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     Review = table.Column<string>(type: "text", nullable: true), | ||||
|                     Rating = table.Column<int>(type: "integer", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerServiceOrderReviews", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrderReviews_SellerServiceOrders_SellerService~", | ||||
|                         column: x => x.SellerServiceOrderId, | ||||
|                         principalTable: "SellerServiceOrders", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrderReviews_Users_ReviewerId", | ||||
|                         column: x => x.ReviewerId, | ||||
|                         principalTable: "Users", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerServiceOrderMessageAttachments", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     SellerServiceOrderMessageId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     FileReference = table.Column<string>(type: "text", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerServiceOrderMessageAttachments", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerServiceOrderMessageAttachments_SellerServiceOrderMess~", | ||||
|                         column: x => x.SellerServiceOrderMessageId, | ||||
|                         principalTable: "SellerServiceOrderMessages", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerConfiguredSettings_SellerSettingId", | ||||
|                 table: "SellerConfiguredSettings", | ||||
|                 column: "SellerSettingId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerConfiguredSettings_UserSellerProfileId", | ||||
|                 table: "SellerConfiguredSettings", | ||||
|                 column: "UserSellerProfileId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerProfilePortfolioPieces_SellerProfileId", | ||||
|                 table: "SellerProfilePortfolioPieces", | ||||
|                 column: "SellerProfileId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderMessageAttachments_SellerServiceOrderMess~", | ||||
|                 table: "SellerServiceOrderMessageAttachments", | ||||
|                 column: "SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderMessages_SellerServiceOrderId", | ||||
|                 table: "SellerServiceOrderMessages", | ||||
|                 column: "SellerServiceOrderId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderMessages_SenderId", | ||||
|                 table: "SellerServiceOrderMessages", | ||||
|                 column: "SenderId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderReviews_ReviewerId", | ||||
|                 table: "SellerServiceOrderReviews", | ||||
|                 column: "ReviewerId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderReviews_SellerServiceOrderId", | ||||
|                 table: "SellerServiceOrderReviews", | ||||
|                 column: "SellerServiceOrderId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrders_BuyerId", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 column: "BuyerId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrders_SellerServiceId", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 column: "SellerServiceId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServices_SellerProfileId", | ||||
|                 table: "SellerServices", | ||||
|                 column: "SellerProfileId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_UserSellerProfiles_UserId", | ||||
|                 table: "UserSellerProfiles", | ||||
|                 column: "UserId", | ||||
|                 unique: true); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerConfiguredSettings"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerProfilePortfolioPieces"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerServiceOrderMessageAttachments"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerServiceOrderReviews"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerSettings"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerServiceOrderMessages"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerServices"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "UserSellerProfiles"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "Users"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										415
									
								
								src/ArtPlatform.Database/Migrations/20240127065133_anotherupdate.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										415
									
								
								src/ArtPlatform.Database/Migrations/20240127065133_anotherupdate.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,415 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127065133_anotherupdate")] | ||||
|     partial class anotherupdate | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<decimal?>("DepositAmount") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<bool>("DepositRequired") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,99 @@ | ||||
| using System.Collections.Generic; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class anotherupdate : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerConfiguredSettings"); | ||||
| 
 | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerSettings"); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<string>( | ||||
|                 name: "Biography", | ||||
|                 table: "UserSellerProfiles", | ||||
|                 type: "text", | ||||
|                 nullable: false, | ||||
|                 defaultValue: ""); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<List<string>>( | ||||
|                 name: "SocialMediaLinks", | ||||
|                 table: "UserSellerProfiles", | ||||
|                 type: "text[]", | ||||
|                 nullable: false); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "Biography", | ||||
|                 table: "UserSellerProfiles"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "SocialMediaLinks", | ||||
|                 table: "UserSellerProfiles"); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerSettings", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     DefaultValue = table.Column<string>(type: "text", nullable: true), | ||||
|                     Description = table.Column<string>(type: "text", nullable: false), | ||||
|                     Name = table.Column<string>(type: "text", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerSettings", x => x.Id); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerConfiguredSettings", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     SellerSettingId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     UserSellerProfileId = table.Column<int>(type: "integer", nullable: false), | ||||
|                     UserSellerSettingId = table.Column<int>(type: "integer", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerConfiguredSettings", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerConfiguredSettings_SellerSettings_SellerSettingId", | ||||
|                         column: x => x.SellerSettingId, | ||||
|                         principalTable: "SellerSettings", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerConfiguredSettings_UserSellerProfiles_UserSellerProfi~", | ||||
|                         column: x => x.UserSellerProfileId, | ||||
|                         principalTable: "UserSellerProfiles", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerConfiguredSettings_SellerSettingId", | ||||
|                 table: "SellerConfiguredSettings", | ||||
|                 column: "SellerSettingId"); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerConfiguredSettings_UserSellerProfileId", | ||||
|                 table: "SellerConfiguredSettings", | ||||
|                 column: "UserSellerProfileId"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										451
									
								
								src/ArtPlatform.Database/Migrations/20240127071156_updateagainn.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										451
									
								
								src/ArtPlatform.Database/Migrations/20240127071156_updateagainn.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,451 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127071156_updateagainn")] | ||||
|     partial class updateagainn | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<decimal?>("DepositAmount") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<bool>("DepositRequired") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,49 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class updateagainn : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "SellerProfileRequests", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "integer", nullable: false) | ||||
|                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), | ||||
|                     UserId = table.Column<string>(type: "text", nullable: false), | ||||
|                     RequestDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), | ||||
|                     Accepted = table.Column<bool>(type: "boolean", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_SellerProfileRequests", x => x.Id); | ||||
|                     table.ForeignKey( | ||||
|                         name: "FK_SellerProfileRequests_Users_UserId", | ||||
|                         column: x => x.UserId, | ||||
|                         principalTable: "Users", | ||||
|                         principalColumn: "Id", | ||||
|                         onDelete: ReferentialAction.Cascade); | ||||
|                 }); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerProfileRequests_UserId", | ||||
|                 table: "SellerProfileRequests", | ||||
|                 column: "UserId"); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "SellerProfileRequests"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										454
									
								
								src/ArtPlatform.Database/Migrations/20240127072659_updatesss.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										454
									
								
								src/ArtPlatform.Database/Migrations/20240127072659_updatesss.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,454 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127072659_updatesss")] | ||||
|     partial class updatesss | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<decimal?>("DepositAmount") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<bool>("DepositRequired") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,29 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class updatesss : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.AddColumn<DateTime>( | ||||
|                 name: "AcceptedDate", | ||||
|                 table: "SellerProfileRequests", | ||||
|                 type: "timestamp with time zone", | ||||
|                 nullable: true); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "AcceptedDate", | ||||
|                 table: "SellerProfileRequests"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										467
									
								
								src/ArtPlatform.Database/Migrations/20240127075103_updatess.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								src/ArtPlatform.Database/Migrations/20240127075103_updatess.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,467 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127075103_updatess")] | ||||
|     partial class updatess | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<decimal?>("DepositAmount") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<bool>("DepositRequired") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,50 @@ | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class updatess : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.AddColumn<int>( | ||||
|                 name: "SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews", | ||||
|                 type: "integer", | ||||
|                 nullable: false, | ||||
|                 defaultValue: 0); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrderReviews_SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews", | ||||
|                 column: "SellerServiceId"); | ||||
| 
 | ||||
|             migrationBuilder.AddForeignKey( | ||||
|                 name: "FK_SellerServiceOrderReviews_SellerServices_SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews", | ||||
|                 column: "SellerServiceId", | ||||
|                 principalTable: "SellerServices", | ||||
|                 principalColumn: "Id", | ||||
|                 onDelete: ReferentialAction.Cascade); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropForeignKey( | ||||
|                 name: "FK_SellerServiceOrderReviews_SellerServices_SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews"); | ||||
| 
 | ||||
|             migrationBuilder.DropIndex( | ||||
|                 name: "IX_SellerServiceOrderReviews_SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "SellerServiceId", | ||||
|                 table: "SellerServiceOrderReviews"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										466
									
								
								src/ArtPlatform.Database/Migrations/20240127080610_lmaomore.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										466
									
								
								src/ArtPlatform.Database/Migrations/20240127080610_lmaomore.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,466 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127080610_lmaomore")] | ||||
|     partial class lmaomore | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<decimal>("Price") | ||||
|                         .HasColumnType("numeric"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class lmaomore : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "DepositAmount", | ||||
|                 table: "SellerServices"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "DepositRequired", | ||||
|                 table: "SellerServices"); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.AddColumn<decimal>( | ||||
|                 name: "DepositAmount", | ||||
|                 table: "SellerServices", | ||||
|                 type: "numeric", | ||||
|                 nullable: true); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<bool>( | ||||
|                 name: "DepositRequired", | ||||
|                 table: "SellerServices", | ||||
|                 type: "boolean", | ||||
|                 nullable: false, | ||||
|                 defaultValue: false); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										488
									
								
								src/ArtPlatform.Database/Migrations/20240127091953_enddate.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										488
									
								
								src/ArtPlatform.Database/Migrations/20240127091953_enddate.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,488 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127091953_enddate")] | ||||
|     partial class enddate | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("CreatedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("EndDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "Seller") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("Seller"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,99 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class enddate : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.AlterColumn<double>( | ||||
|                 name: "Price", | ||||
|                 table: "SellerServices", | ||||
|                 type: "double precision", | ||||
|                 nullable: false, | ||||
|                 oldClrType: typeof(decimal), | ||||
|                 oldType: "numeric"); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<DateTime>( | ||||
|                 name: "CreatedDate", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 type: "timestamp with time zone", | ||||
|                 nullable: false, | ||||
|                 defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<DateTime>( | ||||
|                 name: "EndDate", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 type: "timestamp with time zone", | ||||
|                 nullable: true); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<double>( | ||||
|                 name: "Price", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 type: "double precision", | ||||
|                 nullable: false, | ||||
|                 defaultValue: 0.0); | ||||
| 
 | ||||
|             migrationBuilder.AddColumn<int>( | ||||
|                 name: "SellerId", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 type: "integer", | ||||
|                 nullable: false, | ||||
|                 defaultValue: 0); | ||||
| 
 | ||||
|             migrationBuilder.CreateIndex( | ||||
|                 name: "IX_SellerServiceOrders_SellerId", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 column: "SellerId"); | ||||
| 
 | ||||
|             migrationBuilder.AddForeignKey( | ||||
|                 name: "FK_SellerServiceOrders_UserSellerProfiles_SellerId", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 column: "SellerId", | ||||
|                 principalTable: "UserSellerProfiles", | ||||
|                 principalColumn: "Id", | ||||
|                 onDelete: ReferentialAction.Cascade); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropForeignKey( | ||||
|                 name: "FK_SellerServiceOrders_UserSellerProfiles_SellerId", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropIndex( | ||||
|                 name: "IX_SellerServiceOrders_SellerId", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "CreatedDate", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "EndDate", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "Price", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "SellerId", | ||||
|                 table: "SellerServiceOrders"); | ||||
| 
 | ||||
|             migrationBuilder.AlterColumn<decimal>( | ||||
|                 name: "Price", | ||||
|                 table: "SellerServices", | ||||
|                 type: "numeric", | ||||
|                 nullable: false, | ||||
|                 oldClrType: typeof(double), | ||||
|                 oldType: "double precision"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										491
									
								
								src/ArtPlatform.Database/Migrations/20240127092417_terms.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								src/ArtPlatform.Database/Migrations/20240127092417_terms.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,491 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127092417_terms")] | ||||
|     partial class terms | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("CreatedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("EndDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("TermsAcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "Seller") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("Seller"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										29
									
								
								src/ArtPlatform.Database/Migrations/20240127092417_terms.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/ArtPlatform.Database/Migrations/20240127092417_terms.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class terms : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.AddColumn<DateTime>( | ||||
|                 name: "TermsAcceptedDate", | ||||
|                 table: "SellerServiceOrders", | ||||
|                 type: "timestamp with time zone", | ||||
|                 nullable: true); | ||||
|         } | ||||
| 
 | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "TermsAcceptedDate", | ||||
|                 table: "SellerServiceOrders"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										491
									
								
								src/ArtPlatform.Database/Migrations/20240127093942_makesure.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								src/ArtPlatform.Database/Migrations/20240127093942_makesure.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,491 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using ArtPlatform.Database; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
| using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; | ||||
| 
 | ||||
| #nullable disable | ||||
| 
 | ||||
| namespace ArtPlatform.Database.Migrations | ||||
| { | ||||
|     [DbContext(typeof(ApplicationDbContext))] | ||||
|     [Migration("20240127093942_makesure")] | ||||
|     partial class makesure | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "8.0.1") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 63); | ||||
| 
 | ||||
|             NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfilePortfolioPieces"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("Accepted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("AcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("RequestDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerProfileRequests"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Name") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerProfileId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServices"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("BuyerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("CreatedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("EndDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.Property<double>("Price") | ||||
|                         .HasColumnType("double precision"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("Status") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<DateTime?>("TermsAcceptedDate") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("BuyerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrders"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("Message") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("SenderId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<DateTime>("SentAt") | ||||
|                         .HasColumnType("timestamp with time zone"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.HasIndex("SenderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessages"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<string>("FileReference") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderMessageId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderMessageId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderMessageAttachments"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<int>("Rating") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<string>("Review") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("ReviewerId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.Property<int>("SellerServiceOrderId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("ReviewerId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceId"); | ||||
| 
 | ||||
|                     b.HasIndex("SellerServiceOrderId"); | ||||
| 
 | ||||
|                     b.ToTable("SellerServiceOrderReviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Property<string>("Id") | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCity") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressCountry") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressHouseNumber") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressPostalCode") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressRegion") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("AddressStreet") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("DisplayName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("Email") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("FirstName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<string>("LastName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<int?>("UserSellerProfileId") | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.ToTable("Users"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("integer"); | ||||
| 
 | ||||
|                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); | ||||
| 
 | ||||
|                     b.Property<bool>("AgeRestricted") | ||||
|                         .HasColumnType("boolean"); | ||||
| 
 | ||||
|                     b.Property<string>("Biography") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.Property<List<string>>("SocialMediaLinks") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text[]"); | ||||
| 
 | ||||
|                     b.Property<string>("UserId") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("text"); | ||||
| 
 | ||||
|                     b.HasKey("Id"); | ||||
| 
 | ||||
|                     b.HasIndex("UserId") | ||||
|                         .IsUnique(); | ||||
| 
 | ||||
|                     b.ToTable("UserSellerProfiles"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfilePortfolioPiece", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("PortfolioPieces") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerProfileRequest", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "SellerProfile") | ||||
|                         .WithMany("SellerServices") | ||||
|                         .HasForeignKey("SellerProfileId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Buyer") | ||||
|                         .WithMany("Orders") | ||||
|                         .HasForeignKey("BuyerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.UserSellerProfile", "Seller") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Buyer"); | ||||
| 
 | ||||
|                     b.Navigation("Seller"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessage", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Messages") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Sender") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SenderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
| 
 | ||||
|                     b.Navigation("Sender"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderMessageAttachment", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrderMessage", "SellerServiceOrderMessage") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("SellerServiceOrderMessageId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrderMessage"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrderReview", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "Reviewer") | ||||
|                         .WithMany() | ||||
|                         .HasForeignKey("ReviewerId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerService", "SellerService") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.SellerServiceOrder", "SellerServiceOrder") | ||||
|                         .WithMany("Reviews") | ||||
|                         .HasForeignKey("SellerServiceOrderId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("Reviewer"); | ||||
| 
 | ||||
|                     b.Navigation("SellerService"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServiceOrder"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.HasOne("ArtPlatform.Database.Entities.User", "User") | ||||
|                         .WithOne("UserSellerProfile") | ||||
|                         .HasForeignKey("ArtPlatform.Database.Entities.UserSellerProfile", "UserId") | ||||
|                         .OnDelete(DeleteBehavior.Cascade) | ||||
|                         .IsRequired(); | ||||
| 
 | ||||
|                     b.Navigation("User"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerService", b => | ||||
|                 { | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.SellerServiceOrder", b => | ||||
|                 { | ||||
|                     b.Navigation("Messages"); | ||||
| 
 | ||||
|                     b.Navigation("Reviews"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.User", b => | ||||
|                 { | ||||
|                     b.Navigation("Orders"); | ||||
| 
 | ||||
|                     b.Navigation("UserSellerProfile"); | ||||
|                 }); | ||||
| 
 | ||||
|             modelBuilder.Entity("ArtPlatform.Database.Entities.UserSellerProfile", b => | ||||
|                 { | ||||
|                     b.Navigation("PortfolioPieces"); | ||||
| 
 | ||||
|                     b.Navigation("SellerServices"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Damien Ostler
						Damien Ostler