Skip to content

Commit

Permalink
Add support for per-user default location
Browse files Browse the repository at this point in the history
  • Loading branch information
davewalker5 committed Jul 10, 2024
1 parent 7f6ba31 commit 536e496
Show file tree
Hide file tree
Showing 31 changed files with 1,010 additions and 65 deletions.
Binary file modified diagrams/database-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions docker/api/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/core/aspnet:latest
COPY flightrecorder.api-1.9.1.0 /opt/flightrecorder.api-1.9.1.0
WORKDIR /opt/flightrecorder.api-1.9.1.0/bin
COPY flightrecorder.api-1.10.0.0 /opt/flightrecorder.api-1.10.0.0
WORKDIR /opt/flightrecorder.api-1.10.0.0/bin
ENTRYPOINT [ "./FlightRecorder.Api" ]
4 changes: 2 additions & 2 deletions docker/ui/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:latest AS runtime
COPY flightrecorder.mvc-1.9.1.0 /opt/flightrecorder.mvc-1.9.1.0
WORKDIR /opt/flightrecorder.mvc-1.9.1.0/bin
COPY flightrecorder.mvc-1.10.0.0 /opt/flightrecorder.mvc-1.10.0.0
WORKDIR /opt/flightrecorder.mvc-1.10.0.0/bin
ENTRYPOINT [ "./FlightRecorder.Mvc" ]
59 changes: 59 additions & 0 deletions src/FlightRecorder.Api/Controllers/UserAttributesController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using FlightRecorder.BusinessLogic.Factory;
using FlightRecorder.Entities.Db;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace FlightRecorder.Api.Controllers
{
[Authorize]
[ApiController]
[ApiConventionType(typeof(DefaultApiConventions))]
[Route("[controller]")]
public class UserAttributesController : Controller
{
private readonly FlightRecorderFactory _factory;

public UserAttributesController(FlightRecorderFactory factory)
{
_factory = factory;
}

[HttpGet]
[Route("id/{userId:int}")]
public async Task<ActionResult<List<UserAttributeValue>>> GetUserAttributeValuesAsync(int userId)
{
var user = await _factory.Users.GetUserAsync(userId);

if (user == null)
{
return NotFound();
}

if ((user.Attributes == null) || (user.Attributes.Count == 0))
{
return NoContent();
}

return user.Attributes.ToList();
}

[HttpGet]
[Route("name/{userName}")]
public async Task<ActionResult<List<UserAttributeValue>>> GetUserAttributeValuesAsync(string userName)
{
var user = await _factory.Users.GetUserAsync(userName);

if (user == null)
{
return NotFound();
}

if ((user.Attributes == null) || (user.Attributes.Count == 0))
{
return NoContent();
}

return user.Attributes.ToList();
}
}
}
6 changes: 3 additions & 3 deletions src/FlightRecorder.Api/FlightRecorder.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ReleaseVersion>1.9.1.0</ReleaseVersion>
<FileVersion>1.9.1.0</FileVersion>
<ProductVersion>1.9.1</ProductVersion>
<ReleaseVersion>1.10.0.0</ReleaseVersion>
<FileVersion>1.10.0.0</FileVersion>
<ProductVersion>1.10.0</ProductVersion>
<ImplicitUsings>enable</ImplicitUsings>
<IsPackable>false</IsPackable>
</PropertyGroup>
Expand Down
10 changes: 8 additions & 2 deletions src/FlightRecorder.BusinessLogic/Database/UserManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ public UserManager(FlightRecorderDbContext context)
/// <returns></returns>
public async Task<User> GetUserAsync(int userId)
{
User user = await _context.Users.FirstOrDefaultAsync(u => u.Id == userId);
User user = await _context.Users
.Include(x => x.Attributes)
.ThenInclude(x => x.UserAttribute)
.FirstOrDefaultAsync(u => u.Id == userId);
ThrowIfUserNotFound(user, userId);
return user;
}
Expand All @@ -42,7 +45,10 @@ public async Task<User> GetUserAsync(int userId)
/// <returns></returns>
public async Task<User> GetUserAsync(string userName)
{
User user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == userName);
User user = await _context.Users
.Include(x => x.Attributes)
.ThenInclude(x => x.UserAttribute)
.FirstOrDefaultAsync(u => u.UserName == userName);
ThrowIfUserNotFound(user, userName);
return user;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PackageId>FlightRecorder.BusinessLogic</PackageId>
<PackageVersion>1.7.1.0</PackageVersion>
<PackageVersion>1.8.0.0</PackageVersion>
<Authors>Dave Walker</Authors>
<Copyright>Copyright (c) Dave Walker 2020, 2021, 2022, 2023</Copyright>
<Copyright>Copyright (c) Dave Walker 2020, 2021, 2022, 2023, 2024</Copyright>
<Owners>Dave Walker</Owners>
<PackageReleaseNotes>Dependency updates</PackageReleaseNotes>
<Summary>Flight Recorder Business Logic</Summary>
Expand All @@ -16,7 +16,7 @@
<PackageProjectUrl>https://github.com/davewalker5/FlightRecorderDb</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<ReleaseVersion>1.7.1.0</ReleaseVersion>
<ReleaseVersion>1.8.0.0</ReleaseVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions src/FlightRecorder.Data/FlightRecorder.Data.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PackageId>FlightRecorder.Data</PackageId>
<PackageVersion>1.7.1.0</PackageVersion>
<PackageVersion>1.8.0.0</PackageVersion>
<Authors>Dave Walker</Authors>
<Copyright>Copyright (c) Dave Walker 2020, 2021, 2022, 2023</Copyright>
<Copyright>Copyright (c) Dave Walker 2020, 2021, 2022, 2023, 2024</Copyright>
<Owners>Dave Walker</Owners>
<PackageReleaseNotes>Dependency updates</PackageReleaseNotes>
<Summary>Flight Recorder EF Core Database Layer</Summary>
Expand All @@ -16,7 +16,7 @@
<PackageProjectUrl>https://github.com/davewalker5/FlightRecorderDb</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<ReleaseVersion>1.7.1.0</ReleaseVersion>
<ReleaseVersion>1.8.0.0</ReleaseVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
27 changes: 27 additions & 0 deletions src/FlightRecorder.Data/FlightRecorderDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using FlightRecorder.Entities.Db;
using FlightRecorder.Entities.Reporting;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace FlightRecorder.Data
{
Expand All @@ -19,6 +20,8 @@ public partial class FlightRecorderDbContext : DbContext
public virtual DbSet<Sighting> Sightings { get; set; }
public virtual DbSet<JobStatus> JobStatuses { get; set; }
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<UserAttribute> UserAttributes { get; set; }
public virtual DbSet<UserAttributeValue> UserAttributeValues { get; set; }
public virtual DbSet<AirlineStatistics> AirlineStatistics { get; set; }
public virtual DbSet<LocationStatistics> LocationStatistics { get; set; }
public virtual DbSet<ManufacturerStatistics> ManufacturerStatistics { get; set; }
Expand Down Expand Up @@ -219,6 +222,30 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.Property(e => e.Error).HasColumnName("error");
});

modelBuilder.Entity<UserAttribute>(entity =>
{
entity.ToTable("USER_ATTRIBUTE");
entity.Property(e => e.Id)
.HasColumnName("id")
.ValueGeneratedOnAdd();
entity.Property(e => e.Name).IsRequired().HasColumnName("name").HasColumnType("VARCHAR(100)");
});

modelBuilder.Entity<UserAttributeValue>(entity =>
{
entity.ToTable("USER_ATTRIBUTE_VALUE");
entity.Property(e => e.Id)
.HasColumnName("id")
.ValueGeneratedOnAdd();
entity.Property(e => e.UserId).IsRequired().HasColumnName("user_id");
entity.Property(e => e.UserAttributeId).IsRequired().HasColumnName("user_attribute_id");
entity.Property(e => e.Value).HasColumnName("value").HasColumnType("VARCHAR(1000)");
});

modelBuilder.Entity<User>(entity =>
{
entity.ToTable("USER");
Expand Down
Loading

0 comments on commit 536e496

Please sign in to comment.