mirror of
https://github.com/D4M13N-D3V/art_platform.git
synced 2025-03-14 07:44:54 +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