New Angular based web version #1

Closed
thomas.nuyken wants to merge 150 commits from main into ddd
71 changed files with 177 additions and 224 deletions
Showing only changes of commit a1999bfe41 - Show all commits

View File

@@ -10,18 +10,18 @@ USER app
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG BUILD_CONFIGURATION=Release ARG BUILD_CONFIGURATION=Release
WORKDIR /src WORKDIR /src
COPY ["src/WebApi/WebApi.csproj", "src/WebApi/"] COPY ["src/Vegasco.Server.Api/Vegasco.Server.Api.csproj", "src/Vegasco.Server.Api/"]
RUN dotnet restore "./src/WebApi/WebApi.csproj" RUN dotnet restore "./src/Vegasco.Server.Api/Vegasco.Server.Api.csproj"
COPY . . COPY . .
WORKDIR "/src/src/WebApi" WORKDIR "/src/src/Vegasco.Server.Api"
RUN dotnet build "./WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build RUN dotnet build "./Vegasco.Server.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish FROM build AS publish
ARG BUILD_CONFIGURATION=Release ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false RUN dotnet publish "./Vegasco.Server.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final FROM base AS final
WORKDIR /app WORKDIR /app
COPY --from=publish /app/publish . COPY --from=publish /app/publish .
HEALTHCHECK --interval=20s --timeout=1s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/health || exit 1 HEALTHCHECK --interval=20s --timeout=1s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/health || exit 1
ENTRYPOINT ["dotnet", "WebApi.dll"] ENTRYPOINT ["dotnet", "Vegasco.Server.Api.dll"]

View File

@@ -60,7 +60,7 @@ As appsettings.json (or a environment specific appsettings.*.json):
### Running the application ### Running the application
The solution uses Aspire to orchestrate the application. Specifically, it introduces sensible service defaults, including but not limited to OpenTelemetry, The solution uses Aspire to orchestrate the application. Specifically, it introduces sensible service defaults, including but not limited to OpenTelemetry,
creates a Postgres database as a docker container, and starts the WebApi with the correct configuration to communicate with the database. creates a Postgres database as a docker container, and starts the Api with the correct configuration to communicate with the database.
Ensure you have an identity provider set up, for example Keycloak, and configured the relevant options described above. Ensure you have an identity provider set up, for example Keycloak, and configured the relevant options described above.

View File

@@ -1,6 +1,6 @@
using FluentValidation; using FluentValidation;
namespace Vegasco.WebApi.Authentication; namespace Vegasco.Server.Api.Authentication;
public class JwtOptions public class JwtOptions
{ {

View File

@@ -2,7 +2,7 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Security.Claims; using System.Security.Claims;
namespace Vegasco.WebApi.Authentication; namespace Vegasco.Server.Api.Authentication;
public sealed class UserAccessor public sealed class UserAccessor
{ {

View File

@@ -1,9 +1,9 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Users; using Vegasco.Server.Api.Users;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public class Car public class Car
{ {

View File

@@ -1,6 +1,6 @@
using StronglyTypedIds; using StronglyTypedIds;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
[StronglyTypedId] [StronglyTypedId]
public partial struct CarId; public partial struct CarId;

View File

@@ -1,11 +1,11 @@
using FluentValidation; using FluentValidation;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Authentication; using Vegasco.Server.Api.Authentication;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
using Vegasco.WebApi.Users; using Vegasco.Server.Api.Users;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public static class CreateCar public static class CreateCar
{ {

View File

@@ -1,6 +1,6 @@
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public static class DeleteCar public static class DeleteCar
{ {

View File

@@ -1,6 +1,6 @@
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public static class GetCar public static class GetCar
{ {

View File

@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public static class GetCars public static class GetCars
{ {

View File

@@ -1,10 +1,10 @@
using FluentValidation; using FluentValidation;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Authentication; using Vegasco.Server.Api.Authentication;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Cars; namespace Vegasco.Server.Api.Cars;
public static class UpdateCar public static class UpdateCar
{ {

View File

@@ -1,4 +1,4 @@
namespace Vegasco.WebApi.Common; namespace Vegasco.Server.Api.Common;
public static class Constants public static class Constants
{ {

View File

@@ -2,18 +2,19 @@
using FluentValidation; using FluentValidation;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Vegasco.WebApi.Authentication; using Vegasco.Server.Api.Authentication;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Common;
using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Common; namespace Vegasco.Server.Api.Common;
public static class DependencyInjectionExtensions public static class DependencyInjectionExtensions
{ {
/// <summary> /// <summary>
/// Adds all the WebApi related services to the Dependency Injection container. /// Adds all the Api related services to the Dependency Injection container.
/// </summary> /// </summary>
/// <param name="builder"></param> /// <param name="builder"></param>
public static void AddWebApiServices(this IHostApplicationBuilder builder) public static void AddApiServices(this IHostApplicationBuilder builder)
{ {
builder.Services builder.Services
.AddMiscellaneousServices() .AddMiscellaneousServices()
@@ -30,7 +31,7 @@ public static class DependencyInjectionExtensions
services.AddValidatorsFromAssemblies( services.AddValidatorsFromAssemblies(
[ [
typeof(IWebApiMarker).Assembly typeof(IApiMarker).Assembly
], ServiceLifetime.Singleton); ], ServiceLifetime.Singleton);
services.AddHealthChecks(); services.AddHealthChecks();
@@ -125,7 +126,7 @@ public static class DependencyInjectionExtensions
private static IHostApplicationBuilder AddDbContext(this IHostApplicationBuilder builder) private static IHostApplicationBuilder AddDbContext(this IHostApplicationBuilder builder)
{ {
builder.AddNpgsqlDbContext<ApplicationDbContext>(Server.AppHost.Shared.Constants.Database.Name); builder.AddNpgsqlDbContext<ApplicationDbContext>(AppHost.Shared.Constants.Database.Name);
return builder; return builder;
} }
} }

View File

@@ -2,7 +2,7 @@
using FluentValidation.Results; using FluentValidation.Results;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Vegasco.WebApi.Common; namespace Vegasco.Server.Api.Common;
public class FluentValidationOptions<TOptions> : IValidateOptions<TOptions> public class FluentValidationOptions<TOptions> : IValidateOptions<TOptions>
where TOptions : class where TOptions : class

View File

@@ -0,0 +1,3 @@
namespace Vegasco.Server.Api.Common;
public interface IApiMarker;

View File

@@ -1,8 +1,9 @@
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using System.Globalization; using System.Globalization;
using Vegasco.WebApi.Endpoints; using Vegasco.Server.Api.Endpoints;
using Vegasco.Server.ServiceDefaults;
namespace Vegasco.WebApi.Common; namespace Vegasco.Server.Api.Common;
internal static class StartupExtensions internal static class StartupExtensions
{ {
@@ -12,7 +13,7 @@ internal static class StartupExtensions
builder.Configuration.AddEnvironmentVariables("Vegasco_"); builder.Configuration.AddEnvironmentVariables("Vegasco_");
builder.AddWebApiServices(); builder.AddApiServices();
WebApplication app = builder.Build(); WebApplication app = builder.Build();
return app; return app;

View File

@@ -2,7 +2,7 @@
using FluentValidation.Results; using FluentValidation.Results;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Vegasco.WebApi.Common; namespace Vegasco.Server.Api.Common;
public static class ValidatorExtensions public static class ValidatorExtensions
{ {
@@ -38,7 +38,7 @@ public static class ValidatorExtensions
{ {
if (!combinedErrors.TryGetValue(error.PropertyName, out HashSet<string>? value)) if (!combinedErrors.TryGetValue(error.PropertyName, out HashSet<string>? value))
{ {
value = ([error.ErrorMessage]); value = [error.ErrorMessage];
combinedErrors[error.PropertyName] = value; combinedErrors[error.PropertyName] = value;
continue; continue;
} }

View File

@@ -1,8 +1,8 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public class Consumption public class Consumption
{ {

View File

@@ -1,6 +1,6 @@
using StronglyTypedIds; using StronglyTypedIds;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
[StronglyTypedId] [StronglyTypedId]

View File

@@ -1,10 +1,10 @@
using FluentValidation; using FluentValidation;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public static class CreateConsumption public static class CreateConsumption
{ {

View File

@@ -1,6 +1,6 @@
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public static class DeleteConsumption public static class DeleteConsumption
{ {

View File

@@ -1,6 +1,6 @@
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public static class GetConsumption public static class GetConsumption
{ {

View File

@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public static class GetConsumptions public static class GetConsumptions
{ {

View File

@@ -1,9 +1,9 @@
using FluentValidation; using FluentValidation;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace Vegasco.WebApi.Consumptions; namespace Vegasco.Server.Api.Consumptions;
public static class UpdateConsumption public static class UpdateConsumption
{ {

View File

@@ -1,12 +1,11 @@
using Asp.Versioning.Builder; using Asp.Versioning.Builder;
using Asp.Versioning.Conventions; using Asp.Versioning.Conventions;
using Microsoft.Extensions.DependencyInjection.Extensions; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Info;
using Vegasco.WebApi.Info;
namespace Vegasco.WebApi.Endpoints; namespace Vegasco.Server.Api.Endpoints;
public static class EndpointExtensions public static class EndpointExtensions
{ {

View File

@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Http.HttpResults;
namespace Vegasco.WebApi.Info; namespace Vegasco.Server.Api.Info;
public class GetServerInfo public class GetServerInfo
{ {

View File

@@ -1,10 +1,10 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Users; using Vegasco.Server.Api.Users;
namespace Vegasco.WebApi.Persistence; namespace Vegasco.Server.Api.Persistence;
public class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : DbContext(options) public class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : DbContext(options)
{ {
@@ -17,6 +17,6 @@ public class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
base.OnModelCreating(modelBuilder); base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(IWebApiMarker).Assembly); modelBuilder.ApplyConfigurationsFromAssembly(typeof(IApiMarker).Assembly);
} }
} }

View File

@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
namespace Vegasco.WebApi.Persistence; namespace Vegasco.Server.Api.Persistence;
public class ApplyMigrationsService(ILogger<ApplyMigrationsService> logger, IServiceScopeFactory scopeFactory) public class ApplyMigrationsService(ILogger<ApplyMigrationsService> logger, IServiceScopeFactory scopeFactory)
: IHostedService : IHostedService

View File

@@ -5,11 +5,12 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
#nullable disable #nullable disable
namespace Vegasco.WebApi.Persistence.Migrations namespace Vegasco.Server.Api.Persistence.Migrations
{ {
[DbContext(typeof(ApplicationDbContext))] [DbContext(typeof(ApplicationDbContext))]
[Migration("20240818105918_Initial")] [Migration("20240818105918_Initial")]
@@ -25,7 +26,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uuid"); .HasColumnType("uuid");
@@ -46,7 +47,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Cars"); b.ToTable("Cars");
}); });
modelBuilder.Entity("Vegasco.WebApi.Consumptions.Consumption", b => modelBuilder.Entity("Vegasco.Server.Api.Consumptions.Consumption", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uuid"); .HasColumnType("uuid");
@@ -73,7 +74,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Consumptions"); b.ToTable("Consumptions");
}); });
modelBuilder.Entity("Vegasco.WebApi.Users.User", b => modelBuilder.Entity("Vegasco.Server.Api.Users.User", b =>
{ {
b.Property<string>("Id") b.Property<string>("Id")
.HasColumnType("text"); .HasColumnType("text");
@@ -83,9 +84,9 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Users"); b.ToTable("Users");
}); });
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.HasOne("Vegasco.WebApi.Users.User", "User") b.HasOne("Vegasco.Server.Api.Users.User", "User")
.WithMany("Cars") .WithMany("Cars")
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@@ -94,9 +95,9 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.Navigation("User"); b.Navigation("User");
}); });
modelBuilder.Entity("Vegasco.WebApi.Consumptions.Consumption", b => modelBuilder.Entity("Vegasco.Server.Api.Consumptions.Consumption", b =>
{ {
b.HasOne("Vegasco.WebApi.Cars.Car", "Car") b.HasOne("Vegasco.Server.Api.Cars.Car", "Car")
.WithMany("Consumptions") .WithMany("Consumptions")
.HasForeignKey("CarId") .HasForeignKey("CarId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@@ -105,12 +106,12 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.Navigation("Car"); b.Navigation("Car");
}); });
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.Navigation("Consumptions"); b.Navigation("Consumptions");
}); });
modelBuilder.Entity("Vegasco.WebApi.Users.User", b => modelBuilder.Entity("Vegasco.Server.Api.Users.User", b =>
{ {
b.Navigation("Cars"); b.Navigation("Cars");
}); });

View File

@@ -1,9 +1,8 @@
using System; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable #nullable disable
namespace Vegasco.WebApi.Persistence.Migrations namespace Vegasco.Server.Api.Persistence.Migrations
{ {
/// <inheritdoc /> /// <inheritdoc />
public partial class Initial : Migration public partial class Initial : Migration

View File

@@ -4,11 +4,12 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
#nullable disable #nullable disable
namespace Vegasco.WebApi.Persistence.Migrations namespace Vegasco.Server.Api.Persistence.Migrations
{ {
[DbContext(typeof(ApplicationDbContext))] [DbContext(typeof(ApplicationDbContext))]
partial class ApplicationDbContextModelSnapshot : ModelSnapshot partial class ApplicationDbContextModelSnapshot : ModelSnapshot
@@ -22,7 +23,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uuid"); .HasColumnType("uuid");
@@ -43,7 +44,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Cars"); b.ToTable("Cars");
}); });
modelBuilder.Entity("Vegasco.WebApi.Consumptions.Consumption", b => modelBuilder.Entity("Vegasco.Server.Api.Consumptions.Consumption", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uuid"); .HasColumnType("uuid");
@@ -70,7 +71,7 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Consumptions"); b.ToTable("Consumptions");
}); });
modelBuilder.Entity("Vegasco.WebApi.Users.User", b => modelBuilder.Entity("Vegasco.Server.Api.Users.User", b =>
{ {
b.Property<string>("Id") b.Property<string>("Id")
.HasColumnType("text"); .HasColumnType("text");
@@ -80,9 +81,9 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.ToTable("Users"); b.ToTable("Users");
}); });
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.HasOne("Vegasco.WebApi.Users.User", "User") b.HasOne("Vegasco.Server.Api.Users.User", "User")
.WithMany("Cars") .WithMany("Cars")
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@@ -91,9 +92,9 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.Navigation("User"); b.Navigation("User");
}); });
modelBuilder.Entity("Vegasco.WebApi.Consumptions.Consumption", b => modelBuilder.Entity("Vegasco.Server.Api.Consumptions.Consumption", b =>
{ {
b.HasOne("Vegasco.WebApi.Cars.Car", "Car") b.HasOne("Vegasco.Server.Api.Cars.Car", "Car")
.WithMany("Consumptions") .WithMany("Consumptions")
.HasForeignKey("CarId") .HasForeignKey("CarId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@@ -102,12 +103,12 @@ namespace Vegasco.WebApi.Persistence.Migrations
b.Navigation("Car"); b.Navigation("Car");
}); });
modelBuilder.Entity("Vegasco.WebApi.Cars.Car", b => modelBuilder.Entity("Vegasco.Server.Api.Cars.Car", b =>
{ {
b.Navigation("Consumptions"); b.Navigation("Consumptions");
}); });
modelBuilder.Entity("Vegasco.WebApi.Users.User", b => modelBuilder.Entity("Vegasco.Server.Api.Users.User", b =>
{ {
b.Navigation("Cars"); b.Navigation("Cars");
}); });

View File

@@ -1,4 +1,4 @@
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
WebApplication.CreateBuilder(args) WebApplication.CreateBuilder(args)
.ConfigureServices() .ConfigureServices()

View File

@@ -1,6 +1,6 @@
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace Vegasco.WebApi.Users; namespace Vegasco.Server.Api.Users;
public class User public class User
{ {

View File

@@ -1,7 +1,7 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Vegasco.WebApi.Users; namespace Vegasco.Server.Api.Users;
public class UserTableConfiguration : IEntityTypeConfiguration<User> public class UserTableConfiguration : IEntityTypeConfiguration<User>
{ {

View File

@@ -7,7 +7,7 @@
<UserSecretsId>4bf893d3-0c16-41ec-8b46-2768d841215d</UserSecretsId> <UserSecretsId>4bf893d3-0c16-41ec-8b46-2768d841215d</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext> <DockerfileContext>..\..</DockerfileContext>
<RootNamespace>Vegasco.WebApi</RootNamespace> <RootNamespace>Vegasco.Server.Api</RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@@ -4,7 +4,7 @@ public static class Constants
{ {
public static class Projects public static class Projects
{ {
public const string WebApiName = "webapi"; public const string Api = "Vegasco_Server_Api";
} }
public static class Database public static class Database

View File

@@ -7,7 +7,7 @@ IResourceBuilder<PostgresDatabaseResource> postgres = builder.AddPostgres(Consta
.AddDatabase(Constants.Database.Name); .AddDatabase(Constants.Database.Name);
builder builder
.AddProject<Projects.WebApi>(Constants.Projects.WebApiName) .AddProject<Projects.Vegasco_Server_Api>(Constants.Projects.Api)
.WithReference(postgres) .WithReference(postgres)
.WaitFor(postgres); .WaitFor(postgres);

View File

@@ -21,7 +21,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Vegasco.Server.AppHost.Shared\Vegasco.Server.AppHost.Shared.csproj" IsAspireProjectResource="false" /> <ProjectReference Include="..\Vegasco.Server.AppHost.Shared\Vegasco.Server.AppHost.Shared.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\WebApi\WebApi.csproj" /> <ProjectReference Include="..\Vegasco.Server.Api\Vegasco.Server.Api.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -2,13 +2,13 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.ServiceDiscovery;
using OpenTelemetry; using OpenTelemetry;
using OpenTelemetry.Metrics; using OpenTelemetry.Metrics;
using OpenTelemetry.Trace; using OpenTelemetry.Trace;
namespace Microsoft.Extensions.Hosting; namespace Vegasco.Server.ServiceDefaults;
// Adds common .NET Aspire services: service discovery, resilience, health checks, and OpenTelemetry. // Adds common .NET Aspire services: service discovery, resilience, health checks, and OpenTelemetry.
// This project should be referenced by each service project in your solution. // This project should be referenced by each service project in your solution.

View File

@@ -1,3 +0,0 @@
namespace Vegasco.WebApi.Common;
public interface IWebApiMarker;

View File

@@ -1,7 +1,7 @@
using Bogus; using Bogus;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
internal class CarFaker internal class CarFaker
{ {

View File

@@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Cars; namespace Vegasco.Server.Api.Tests.Integration.Cars;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class CreateCarTests : IAsyncLifetime public class CreateCarTests : IAsyncLifetime

View File

@@ -2,10 +2,10 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Cars; namespace Vegasco.Server.Api.Tests.Integration.Cars;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class DeleteCarTests : IAsyncLifetime public class DeleteCarTests : IAsyncLifetime

View File

@@ -1,9 +1,9 @@
using FluentAssertions; using FluentAssertions;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace WebApi.Tests.Integration.Cars; namespace Vegasco.Server.Api.Tests.Integration.Cars;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class GetCarTests : IAsyncLifetime public class GetCarTests : IAsyncLifetime

View File

@@ -1,9 +1,9 @@
using FluentAssertions; using FluentAssertions;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace WebApi.Tests.Integration.Cars; namespace Vegasco.Server.Api.Tests.Integration.Cars;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class GetCarsTests : IAsyncLifetime public class GetCarsTests : IAsyncLifetime

View File

@@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Cars; namespace Vegasco.Server.Api.Tests.Integration.Cars;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class UpdateCarTests : IAsyncLifetime public class UpdateCarTests : IAsyncLifetime

View File

@@ -1,7 +1,7 @@
using Bogus; using Bogus;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
internal class ConsumptionFaker internal class ConsumptionFaker
{ {

View File

@@ -3,11 +3,11 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Consumptions; namespace Vegasco.Server.Api.Tests.Integration.Consumptions;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class CreateConsumptionTests : IAsyncLifetime public class CreateConsumptionTests : IAsyncLifetime

View File

@@ -2,11 +2,11 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Consumptions; namespace Vegasco.Server.Api.Tests.Integration.Consumptions;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class DeleteConsumptionTests : IAsyncLifetime public class DeleteConsumptionTests : IAsyncLifetime

View File

@@ -2,11 +2,11 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Consumptions; namespace Vegasco.Server.Api.Tests.Integration.Consumptions;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class GetConsumptionTests : IAsyncLifetime public class GetConsumptionTests : IAsyncLifetime

View File

@@ -2,11 +2,11 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Consumptions; namespace Vegasco.Server.Api.Tests.Integration.Consumptions;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class GetConsumptionsTests : IAsyncLifetime public class GetConsumptionsTests : IAsyncLifetime

View File

@@ -3,11 +3,11 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Net.Http.Json; using System.Net.Http.Json;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
using Vegasco.WebApi.Persistence; using Vegasco.Server.Api.Persistence;
namespace WebApi.Tests.Integration.Consumptions; namespace Vegasco.Server.Api.Tests.Integration.Consumptions;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class UpdateConsumptionTests : IAsyncLifetime public class UpdateConsumptionTests : IAsyncLifetime

View File

@@ -1,6 +1,7 @@
using FluentAssertions; using FluentAssertions;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
internal static class FluentAssertionConfiguration internal static class FluentAssertionConfiguration
{ {
private const int DateTimeComparisonPrecision = 100; private const int DateTimeComparisonPrecision = 100;

View File

@@ -1,9 +1,9 @@
using System.Net.Http.Json; using System.Net.Http.Json;
using FluentAssertions; using FluentAssertions;
using FluentAssertions.Extensions; using FluentAssertions.Extensions;
using Vegasco.WebApi.Info; using Vegasco.Server.Api.Info;
namespace WebApi.Tests.Integration.Info; namespace Vegasco.Server.Api.Tests.Integration.Info;
[Collection(SharedTestCollection.Name)] [Collection(SharedTestCollection.Name)]
public class GetServerInfoTests public class GetServerInfoTests

View File

@@ -2,7 +2,7 @@
using Respawn; using Respawn;
using System.Data.Common; using System.Data.Common;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
internal sealed class PostgresRespawner : IDisposable internal sealed class PostgresRespawner : IDisposable
{ {
private readonly DbConnection _connection; private readonly DbConnection _connection;

View File

@@ -1,4 +1,4 @@
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
[CollectionDefinition(Name)] [CollectionDefinition(Name)]
public class SharedTestCollection : ICollectionFixture<WebAppFactory> public class SharedTestCollection : ICollectionFixture<WebAppFactory>

View File

@@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Authorization.Policy;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using System.Security.Claims; using System.Security.Claims;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
public sealed class TestUserAlwaysAuthorizedPolicyEvaluator : IPolicyEvaluator public sealed class TestUserAlwaysAuthorizedPolicyEvaluator : IPolicyEvaluator
{ {

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
@@ -16,7 +16,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="FluentAssertions" Version="8.3.0" /> <PackageReference Include="FluentAssertions" Version="[7.2.0,8.0.0)" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.5" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.5" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
@@ -32,7 +32,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Vegasco.Server.AppHost.Shared\Vegasco.Server.AppHost.Shared.csproj" /> <ProjectReference Include="..\..\src\Vegasco.Server.AppHost.Shared\Vegasco.Server.AppHost.Shared.csproj" />
<ProjectReference Include="..\..\src\WebApi\WebApi.csproj" /> <ProjectReference Include="..\..\src\Vegasco.Server.Api\Vegasco.Server.Api.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -7,11 +7,11 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Testcontainers.PostgreSql; using Testcontainers.PostgreSql;
using Vegasco.WebApi.Common; using Vegasco.Server.Api.Common;
namespace WebApi.Tests.Integration; namespace Vegasco.Server.Api.Tests.Integration;
public sealed class WebAppFactory : WebApplicationFactory<IWebApiMarker>, IAsyncLifetime public sealed class WebAppFactory : WebApplicationFactory<IApiMarker>, IAsyncLifetime
{ {
private readonly PostgreSqlContainer _database = new PostgreSqlBuilder() private readonly PostgreSqlContainer _database = new PostgreSqlBuilder()
.WithImage(DockerImage) .WithImage(DockerImage)
@@ -38,7 +38,7 @@ public sealed class WebAppFactory : WebApplicationFactory<IWebApiMarker>, IAsync
{ {
IEnumerable<KeyValuePair<string, string?>> customConfig = IEnumerable<KeyValuePair<string, string?>> customConfig =
[ [
new KeyValuePair<string, string?>($"ConnectionStrings:{Vegasco.Server.AppHost.Shared.Constants.Database.Name}", _database.GetConnectionString()), new KeyValuePair<string, string?>($"ConnectionStrings:{AppHost.Shared.Constants.Database.Name}", _database.GetConnectionString()),
new KeyValuePair<string, string?>("JWT:ValidAudience", "https://localhost"), new KeyValuePair<string, string?>("JWT:ValidAudience", "https://localhost"),
new KeyValuePair<string, string?>("JWT:MetadataUrl", "https://localhost"), new KeyValuePair<string, string?>("JWT:MetadataUrl", "https://localhost"),
new KeyValuePair<string, string?>("JWT:NameClaimType", null), new KeyValuePair<string, string?>("JWT:NameClaimType", null),

View File

@@ -3,9 +3,9 @@ using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using NSubstitute; using NSubstitute;
using System.Security.Claims; using System.Security.Claims;
using Vegasco.WebApi.Authentication; using Vegasco.Server.Api.Authentication;
namespace WebApi.Tests.Unit.Authentication; namespace Vegasco.Server.Api.Tests.Unit.Authentication;
public sealed class UserAccessorTests public sealed class UserAccessorTests
{ {
private readonly UserAccessor _sut; private readonly UserAccessor _sut;

View File

@@ -1,8 +1,8 @@
using FluentAssertions; using FluentAssertions;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace WebApi.Tests.Unit.Cars; namespace Vegasco.Server.Api.Tests.Unit.Cars;
public sealed class CreateCarRequestValidatorTests public sealed class CreateCarRequestValidatorTests
{ {

View File

@@ -1,8 +1,8 @@
using FluentAssertions; using FluentAssertions;
using FluentValidation.Results; using FluentValidation.Results;
using Vegasco.WebApi.Cars; using Vegasco.Server.Api.Cars;
namespace WebApi.Tests.Unit.Cars; namespace Vegasco.Server.Api.Tests.Unit.Cars;
public sealed class UpdateCarRequestValidatorTests public sealed class UpdateCarRequestValidatorTests
{ {

View File

@@ -1,9 +1,9 @@
using FluentAssertions; using FluentAssertions;
using FluentValidation.Results; using FluentValidation.Results;
using NSubstitute; using NSubstitute;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
namespace WebApi.Tests.Unit.Consumptions; namespace Vegasco.Server.Api.Tests.Unit.Consumptions;
public class CreateConsumptionRequestValidatorTests public class CreateConsumptionRequestValidatorTests
{ {
private readonly CreateConsumption.Validator _sut; private readonly CreateConsumption.Validator _sut;

View File

@@ -1,9 +1,9 @@
using FluentAssertions; using FluentAssertions;
using FluentValidation.Results; using FluentValidation.Results;
using NSubstitute; using NSubstitute;
using Vegasco.WebApi.Consumptions; using Vegasco.Server.Api.Consumptions;
namespace WebApi.Tests.Unit.Consumptions; namespace Vegasco.Server.Api.Tests.Unit.Consumptions;
public class UpdateConsumptionRequestValidatorTests public class UpdateConsumptionRequestValidatorTests
{ {

View File

@@ -26,7 +26,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\WebApi\WebApi.csproj" /> <ProjectReference Include="..\..\src\Vegasco.Server.Api\Vegasco.Server.Api.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -1,50 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35617.110
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{089100B1-113F-4E66-888A-E83F3999EAFD}"
ProjectSection(SolutionItems) = preProject
.drone.yml = .drone.yml
Dockerfile = Dockerfile
README.md = README.md
version.json = version.json
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApi", "src\WebApi\WebApi.csproj", "{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApi.Tests.Integration", "tests\WebApi.Tests.Integration\WebApi.Tests.Integration.csproj", "{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApi.Tests.Unit", "tests\WebApi.Tests.Unit\WebApi.Tests.Unit.csproj", "{2DD4D427-6FA5-EC56-76FC-9D71C4631E00}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788}.Release|Any CPU.Build.0 = Release|Any CPU
{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6}.Release|Any CPU.Build.0 = Release|Any CPU
{2DD4D427-6FA5-EC56-76FC-9D71C4631E00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DD4D427-6FA5-EC56-76FC-9D71C4631E00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DD4D427-6FA5-EC56-76FC-9D71C4631E00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DD4D427-6FA5-EC56-76FC-9D71C4631E00}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{1B0A04C3-E6BC-0FB7-7994-7C99BDAB1788} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{72BF8CBC-E916-1472-A1E2-8F5DCF1A95C6} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{2DD4D427-6FA5-EC56-76FC-9D71C4631E00} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
EndGlobalSection
EndGlobal

View File

@@ -9,10 +9,10 @@
<Project Path="src/Vegasco.Server.AppHost.Shared/Vegasco.Server.AppHost.Shared.csproj" /> <Project Path="src/Vegasco.Server.AppHost.Shared/Vegasco.Server.AppHost.Shared.csproj" />
<Project Path="src/Vegasco.Server.AppHost/Vegasco.Server.AppHost.csproj" /> <Project Path="src/Vegasco.Server.AppHost/Vegasco.Server.AppHost.csproj" />
<Project Path="src/Vegasco.Server.ServiceDefaults/Vegasco.Server.ServiceDefaults.csproj" /> <Project Path="src/Vegasco.Server.ServiceDefaults/Vegasco.Server.ServiceDefaults.csproj" />
<Project Path="src/WebApi/WebApi.csproj" /> <Project Path="src/Vegasco.Server.Api/Vegasco.Server.Api.csproj" />
</Folder> </Folder>
<Folder Name="/tests/"> <Folder Name="/tests/">
<Project Path="tests/WebApi.Tests.Integration/WebApi.Tests.Integration.csproj" /> <Project Path="tests/Vegasco.Server.Api.Tests.Integration/Vegasco.Server.Api.Tests.Integration.csproj" />
<Project Path="tests/WebApi.Tests.Unit/WebApi.Tests.Unit.csproj" /> <Project Path="tests/Vegasco.Server.Api.Tests.Unit/Vegasco.Server.Api.Tests.Unit.csproj" />
</Folder> </Folder>
</Solution> </Solution>