reorganization of database layer
This commit is contained in:
@ -1,15 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace UserService.Data
|
||||
{
|
||||
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,25 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace UserService.Data
|
||||
{
|
||||
public class WeatherForecastService
|
||||
{
|
||||
private static readonly string[] Summaries = new[]
|
||||
{
|
||||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
|
||||
};
|
||||
|
||||
public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)
|
||||
{
|
||||
var rng = new Random();
|
||||
return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = startDate.AddDays(index),
|
||||
TemperatureC = rng.Next(-20, 55),
|
||||
Summary = Summaries[rng.Next(Summaries.Length)]
|
||||
}).ToArray());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace UserService.DataModels
|
||||
{
|
||||
public static class ModelBuilderExtensions
|
||||
{
|
||||
public static void Seed(this ModelBuilder modelBuilder)
|
||||
{
|
||||
var users = new OrganizationUnit {CommonName = "Users", Id = -2};
|
||||
var groups = new OrganizationUnit {CommonName = "Groups", Id = -1};
|
||||
modelBuilder.Entity<OrganizationUnit>().HasData(users, groups);
|
||||
var user = new User {CommonName = "holger", IsActive = true, Id = -4, ParentId = users.Id};
|
||||
modelBuilder.Entity<User>().HasData(user);
|
||||
var secGroup = new SecurityGroup {CommonName = "Global Admin", Id = -3, ParentId = groups.Id};
|
||||
modelBuilder.Entity<SecurityGroup>().HasData(secGroup);
|
||||
|
||||
modelBuilder.Entity<UserMember>()
|
||||
.HasData(new UserMember {MemberId = secGroup.Id, UserId = user.Id});
|
||||
}
|
||||
|
||||
public static void CreateRelations(this ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<UserMember>()
|
||||
.HasKey(bc => new {bc.MemberId, bc.UserId});
|
||||
modelBuilder.Entity<UserMember>()
|
||||
.HasOne(bc => bc.User)
|
||||
.WithMany(b => b!.MemberOf)
|
||||
.HasForeignKey(bc => bc.UserId);
|
||||
modelBuilder.Entity<UserMember>()
|
||||
.HasOne(bc => bc.Member)
|
||||
.WithMany(c => c!.Members)
|
||||
.HasForeignKey(bc => bc.MemberId);
|
||||
|
||||
modelBuilder.Entity<Node>()
|
||||
.HasMany(c => c.Children)
|
||||
.WithOne(e => e.Parent!)
|
||||
.HasForeignKey(bc => bc.ParentId);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace UserService.DataModels
|
||||
{
|
||||
public class OrganizationUnit : Node
|
||||
{
|
||||
public Member? Manager { get; set; }
|
||||
}
|
||||
|
||||
public class SecurityGroup : Member
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class User : Member
|
||||
{
|
||||
public string? FirstName { get; set; }
|
||||
public string? LastName { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
public string FullName => $"{FirstName} {LastName}";
|
||||
|
||||
public IEnumerable<UserMember> MemberOf { get; set; } = new List<UserMember>();
|
||||
|
||||
public User Clone()
|
||||
{
|
||||
return new User
|
||||
{
|
||||
Children = Children,
|
||||
CommonName = CommonName,
|
||||
Description = Description,
|
||||
EMail = EMail,
|
||||
FirstName = FirstName,
|
||||
Id = Id,
|
||||
IsActive = IsActive,
|
||||
LastName = LastName,
|
||||
MemberOf = MemberOf,
|
||||
Members = Members,
|
||||
Parent = Parent,
|
||||
ParentId = ParentId
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class UserMember
|
||||
{
|
||||
public int MemberId { get; set; }
|
||||
public Member? Member { get; set; }
|
||||
|
||||
public int UserId { get; set; }
|
||||
|
||||
public User? User { get; set; }
|
||||
}
|
||||
|
||||
public abstract class Member : Node
|
||||
{
|
||||
[EmailAddress]
|
||||
public string? EMail { get; set; }
|
||||
|
||||
public ICollection<UserMember> Members { get; set; } = new List<UserMember>();
|
||||
}
|
||||
|
||||
public abstract class Node
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required] public string CommonName { get; set; } = "commonName";
|
||||
public string? Description { get; set; }
|
||||
public ICollection<Node> Children { get; set; } = new List<Node>();
|
||||
public Node? Parent { get; set; } //Parent
|
||||
public int? ParentId { get; set; }
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace UserService.DataModels
|
||||
{
|
||||
public class UserServiceDbContext : DbContext
|
||||
{
|
||||
public DbSet<User> Users { get; set; } = null!;
|
||||
public DbSet<SecurityGroup> SecurityGroups { get; set; } = null!;
|
||||
public DbSet<UserMember> UserMembers { get; set; } = null!;
|
||||
|
||||
public DbSet<OrganizationUnit> OrganizationUnits { get; set; } = null!;
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
||||
=> options.UseSqlite(@"Data Source=C:\Users\holger\Desktop\UserService\UserService.db");
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.CreateRelations();
|
||||
modelBuilder.Seed();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,177 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using UserService.DataModels;
|
||||
|
||||
namespace UserService.Migrations
|
||||
{
|
||||
[DbContext(typeof(UserServiceDbContext))]
|
||||
[Migration("20200724180034_initial")]
|
||||
partial class initial
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "3.1.6");
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Node", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("CommonName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Description")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Discriminator")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("ParentId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("ParentId");
|
||||
|
||||
b.ToTable("Node");
|
||||
|
||||
b.HasDiscriminator<string>("Discriminator").HasValue("Node");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.UserMember", b =>
|
||||
{
|
||||
b.Property<int>("MemberId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("MemberId", "UserId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("UserMembers");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
MemberId = -3,
|
||||
UserId = -4
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Member", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Node");
|
||||
|
||||
b.Property<string>("EMail")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasDiscriminator().HasValue("Member");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.OrganizationUnit", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Node");
|
||||
|
||||
b.Property<int?>("ManagerId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasIndex("ManagerId");
|
||||
|
||||
b.HasDiscriminator().HasValue("OrganizationUnit");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -2,
|
||||
CommonName = "Users"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = -1,
|
||||
CommonName = "Groups"
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.SecurityGroup", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Member");
|
||||
|
||||
b.HasDiscriminator().HasValue("SecurityGroup");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -3,
|
||||
CommonName = "Global Admin",
|
||||
ParentId = -1
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.User", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Member");
|
||||
|
||||
b.Property<string>("FirstName")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("IsActive")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("LastName")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasDiscriminator().HasValue("User");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -4,
|
||||
CommonName = "holger",
|
||||
ParentId = -2,
|
||||
IsActive = true
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Node", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Node", "Parent")
|
||||
.WithMany("Children")
|
||||
.HasForeignKey("ParentId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.UserMember", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Member", "Member")
|
||||
.WithMany("Members")
|
||||
.HasForeignKey("MemberId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("UserService.DataModels.User", "User")
|
||||
.WithMany("MemberOf")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.OrganizationUnit", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Member", "Manager")
|
||||
.WithMany()
|
||||
.HasForeignKey("ManagerId");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
namespace UserService.Migrations
|
||||
{
|
||||
public partial class initial : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Node",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
CommonName = table.Column<string>(nullable: false),
|
||||
Description = table.Column<string>(nullable: true),
|
||||
ParentId = table.Column<int>(nullable: true),
|
||||
Discriminator = table.Column<string>(nullable: false),
|
||||
EMail = table.Column<string>(nullable: true),
|
||||
FirstName = table.Column<string>(nullable: true),
|
||||
LastName = table.Column<string>(nullable: true),
|
||||
IsActive = table.Column<bool>(nullable: true),
|
||||
ManagerId = table.Column<int>(nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Node", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_Node_Node_ParentId",
|
||||
column: x => x.ParentId,
|
||||
principalTable: "Node",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
table.ForeignKey(
|
||||
name: "FK_Node_Node_ManagerId",
|
||||
column: x => x.ManagerId,
|
||||
principalTable: "Node",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "UserMembers",
|
||||
columns: table => new
|
||||
{
|
||||
MemberId = table.Column<int>(nullable: false),
|
||||
UserId = table.Column<int>(nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.UserId });
|
||||
table.ForeignKey(
|
||||
name: "FK_UserMembers_Node_MemberId",
|
||||
column: x => x.MemberId,
|
||||
principalTable: "Node",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_UserMembers_Node_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "Node",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Node",
|
||||
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
|
||||
values: new object[] { -2, "Users", null, "OrganizationUnit", null, null });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Node",
|
||||
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
|
||||
values: new object[] { -1, "Groups", null, "OrganizationUnit", null, null });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Node",
|
||||
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail", "FirstName", "IsActive", "LastName" },
|
||||
values: new object[] { -4, "holger", null, "User", -2, null, null, true, null });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Node",
|
||||
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail" },
|
||||
values: new object[] { -3, "Global Admin", null, "SecurityGroup", -1, null });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "UserMembers",
|
||||
columns: new[] { "MemberId", "UserId" },
|
||||
values: new object[] { -3, -4 });
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Node_ParentId",
|
||||
table: "Node",
|
||||
column: "ParentId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Node_ManagerId",
|
||||
table: "Node",
|
||||
column: "ManagerId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_UserMembers_UserId",
|
||||
table: "UserMembers",
|
||||
column: "UserId");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "UserMembers");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Node");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,175 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using UserService.DataModels;
|
||||
|
||||
namespace UserService.Migrations
|
||||
{
|
||||
[DbContext(typeof(UserServiceDbContext))]
|
||||
partial class UserServiceDbContextModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "3.1.6");
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Node", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("CommonName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Description")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Discriminator")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("ParentId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("ParentId");
|
||||
|
||||
b.ToTable("Node");
|
||||
|
||||
b.HasDiscriminator<string>("Discriminator").HasValue("Node");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.UserMember", b =>
|
||||
{
|
||||
b.Property<int>("MemberId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("MemberId", "UserId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("UserMembers");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
MemberId = -3,
|
||||
UserId = -4
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Member", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Node");
|
||||
|
||||
b.Property<string>("EMail")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasDiscriminator().HasValue("Member");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.OrganizationUnit", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Node");
|
||||
|
||||
b.Property<int?>("ManagerId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasIndex("ManagerId");
|
||||
|
||||
b.HasDiscriminator().HasValue("OrganizationUnit");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -2,
|
||||
CommonName = "Users"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = -1,
|
||||
CommonName = "Groups"
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.SecurityGroup", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Member");
|
||||
|
||||
b.HasDiscriminator().HasValue("SecurityGroup");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -3,
|
||||
CommonName = "Global Admin",
|
||||
ParentId = -1
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.User", b =>
|
||||
{
|
||||
b.HasBaseType("UserService.DataModels.Member");
|
||||
|
||||
b.Property<string>("FirstName")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("IsActive")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("LastName")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasDiscriminator().HasValue("User");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = -4,
|
||||
CommonName = "holger",
|
||||
ParentId = -2,
|
||||
IsActive = true
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.Node", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Node", "Parent")
|
||||
.WithMany("Children")
|
||||
.HasForeignKey("ParentId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.UserMember", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Member", "Member")
|
||||
.WithMany("Members")
|
||||
.HasForeignKey("MemberId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("UserService.DataModels.User", "User")
|
||||
.WithMany("MemberOf")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("UserService.DataModels.OrganizationUnit", b =>
|
||||
{
|
||||
b.HasOne("UserService.DataModels.Member", "Manager")
|
||||
.WithMany()
|
||||
.HasForeignKey("ManagerId");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -1,16 +1,30 @@
|
||||
@page "/counter"
|
||||
@using UserService.DatabaseLayer.DataModels
|
||||
@using UserService.DatabaseLayer.Repository
|
||||
@inject IOrganizationUnitsRepository OuRepository
|
||||
|
||||
<h1>Counter</h1>
|
||||
<h1>Tree</h1>
|
||||
|
||||
<p>Current count: @currentCount</p>
|
||||
|
||||
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
private void IncrementCount()
|
||||
{
|
||||
currentCount++;
|
||||
}
|
||||
@if (_organizationUnits == null)
|
||||
{
|
||||
<p>
|
||||
<em>Loading...</em>
|
||||
</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MatNavMenu>
|
||||
@foreach (var unit in _organizationUnits)
|
||||
{
|
||||
<OrgUnitItem OrganizationUnit="@unit"/>
|
||||
}
|
||||
</MatNavMenu>
|
||||
}
|
||||
@code {
|
||||
private IReadOnlyList<OrganizationUnit> _organizationUnits;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_organizationUnits = await OuRepository.GetAllAsync().ConfigureAwait(false);
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
@page "/fetchdata"
|
||||
|
||||
@using UserService.Data
|
||||
@inject WeatherForecastService ForecastService
|
||||
|
||||
<h1>Weather forecast</h1>
|
||||
|
||||
<p>This component demonstrates fetching data from a service.</p>
|
||||
|
||||
@if (forecasts == null)
|
||||
{
|
||||
<p><em>Loading...</em></p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Temp. (C)</th>
|
||||
<th>Temp. (F)</th>
|
||||
<th>Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var forecast in forecasts)
|
||||
{
|
||||
<tr>
|
||||
<td>@forecast.Date.ToShortDateString()</td>
|
||||
<td>@forecast.TemperatureC</td>
|
||||
<td>@forecast.TemperatureF</td>
|
||||
<td>@forecast.Summary</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
|
||||
@code {
|
||||
private WeatherForecast[] forecasts;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
@page "/"
|
||||
@using UserService.Repository
|
||||
@using UserService.DataModels
|
||||
@using UserService.DatabaseLayer.DataModels
|
||||
@using UserService.DatabaseLayer.Repository
|
||||
@inject IUsersRepository UsersRepository
|
||||
|
||||
|
||||
@ -63,7 +63,7 @@ else
|
||||
}
|
||||
else
|
||||
{
|
||||
<MatDialogTitle>No user selected</MatDialogTitle>
|
||||
<MatDialogTitle>No securityGroup selected</MatDialogTitle>
|
||||
}
|
||||
<MatDialogActions>
|
||||
<MatButton OnClick="@(e => { _dialogIsOpen = false; })">No Thanks</MatButton>
|
||||
@ -74,7 +74,7 @@ else
|
||||
|
||||
@code {
|
||||
bool _dialogIsOpen;
|
||||
User _userToEdit;
|
||||
User? _userToEdit;
|
||||
|
||||
private IReadOnlyList<User> _users;
|
||||
|
||||
|
@ -1,124 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using UserService.DataModels;
|
||||
|
||||
namespace UserService.Repository
|
||||
{
|
||||
public class OrganizationUnitRepository : IOrganizationUnitRepository
|
||||
{
|
||||
public async Task<IReadOnlyList<OrganizationUnit>> GetAllAsync(CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return await db.OrganizationUnits.ToListAsync(token);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<OrganizationUnit?> GetAsync(Func<OrganizationUnit, bool> predicate,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return db.OrganizationUnits.Where(predicate).FirstOrDefault();
|
||||
}
|
||||
|
||||
public async Task AddAsync(OrganizationUnit entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
await db.OrganizationUnits.AddAsync(@entity, token);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task UpdateAsync(OrganizationUnit entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.OrganizationUnits.Update(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(OrganizationUnit entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.OrganizationUnits.Remove(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class SecurityGroupsRepository : ISecurityGroupsRepository
|
||||
{
|
||||
public async Task<IReadOnlyList<SecurityGroup>> GetAllAsync(CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return await db.SecurityGroups.ToListAsync(token);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<SecurityGroup?> GetAsync(Func<SecurityGroup, bool> predicate, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return db.SecurityGroups.Where(predicate).FirstOrDefault();
|
||||
}
|
||||
|
||||
public async Task AddAsync(SecurityGroup entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
await db.SecurityGroups.AddAsync(@entity, token);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task UpdateAsync(SecurityGroup entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.SecurityGroups.Update(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(SecurityGroup entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.SecurityGroups.Remove(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class UsersRepository : IUsersRepository
|
||||
{
|
||||
public async Task<IReadOnlyList<User>> GetAllAsync(CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return await db.Users.ToListAsync(token);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<User?> GetAsync(Func<User, bool> predicate, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
return db.Users.Where(predicate).FirstOrDefault();
|
||||
}
|
||||
|
||||
public async Task AddAsync(User entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
await db.Users.AddAsync(@entity, token);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task UpdateAsync(User entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.Users.Update(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(User entity, CancellationToken token = default)
|
||||
{
|
||||
await using var db = new UserServiceDbContext();
|
||||
db.Users.Remove(entity);
|
||||
await db.SaveChangesAsync(token);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using UserService.DataModels;
|
||||
|
||||
namespace UserService.Repository
|
||||
{
|
||||
public interface IRepository<T> where T : Node
|
||||
{
|
||||
Task<IReadOnlyList<T>> GetAllAsync(CancellationToken token = default);
|
||||
Task<T?> GetAsync(Func<T, bool> predicate, CancellationToken token = default);
|
||||
Task AddAsync(T entity, CancellationToken token = default);
|
||||
Task UpdateAsync(T entity, CancellationToken token = default);
|
||||
Task DeleteAsync(T entity, CancellationToken token = default);
|
||||
}
|
||||
|
||||
public interface IOrganizationUnitRepository : IRepository<OrganizationUnit>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public interface ISecurityGroupsRepository : IRepository<SecurityGroup>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public interface IUsersRepository : IRepository<User>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -17,11 +17,6 @@
|
||||
<span class="oi oi-plus" aria-hidden="true"></span> Counter
|
||||
</NavLink>
|
||||
</li>
|
||||
<li class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="fetchdata">
|
||||
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
|
||||
</NavLink>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
15
UserService/Shared/OrgUnitItem.razor
Normal file
15
UserService/Shared/OrgUnitItem.razor
Normal file
@ -0,0 +1,15 @@
|
||||
@using UserService.DatabaseLayer.DataModels
|
||||
<MatNavSubMenu>
|
||||
<MatNavSubMenuHeader>
|
||||
<MatNavItem AllowSelection="false"><MatIcon Icon="folder"></MatIcon> @OrganizationUnit.CommonName</MatNavItem>
|
||||
</MatNavSubMenuHeader>
|
||||
<MatNavSubMenuList>
|
||||
<MatNavItem Disabled="true" Href="#">Item 6.A</MatNavItem>
|
||||
<MatNavItem>Item 6.B</MatNavItem>
|
||||
<MatNavItem>Item 6.C</MatNavItem>
|
||||
</MatNavSubMenuList>
|
||||
</MatNavSubMenu>
|
||||
@code {
|
||||
[Parameter]
|
||||
public OrganizationUnit OrganizationUnit { get; set; }
|
||||
}
|
@ -1,16 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.HttpsPolicy;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using UserService.Data;
|
||||
using UserService.Repository;
|
||||
using UserService.DatabaseLayer.Repository;
|
||||
|
||||
namespace UserService
|
||||
{
|
||||
@ -29,10 +22,10 @@ namespace UserService
|
||||
{
|
||||
services.AddRazorPages();
|
||||
services.AddServerSideBlazor();
|
||||
services.AddSingleton<WeatherForecastService>();
|
||||
services.AddSingleton<IUsersRepository, UsersRepository>();
|
||||
services.AddSingleton<ISecurityGroupsRepository, SecurityGroupsRepository>();
|
||||
services.AddSingleton<IOrganizationUnitRepository, OrganizationUnitRepository>();
|
||||
services.AddSingleton<IOrganizationUnitsRepository, OrganizationUnitsRepository>();
|
||||
//services.AddSingleton<INodesRepository, NodesRepository>();
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
|
@ -7,11 +7,10 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MatBlazor" Version="2.6.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.6">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\UserService.DatabaseLayer\UserService.DatabaseLayer.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
Reference in New Issue
Block a user