commit blabla3

This commit is contained in:
gokhoal
2026-06-11 01:30:14 +02:00
12 changed files with 726 additions and 44 deletions
@@ -6,8 +6,7 @@ using System.Security.Claims;
namespace Knots.Endpoints.Discussion; namespace Knots.Endpoints.Discussion;
public class CreateGroupDiscussionEndpoint(KnotsDbContext db) public class CreateGroupDiscussionEndpoint(KnotsDbContext db) : Endpoint<CreateGroupDiscussionRequest, GetDiscussionDto>
: Endpoint<CreateGroupDiscussionRequest, GetDiscussionDto>
{ {
public override void Configure() public override void Configure()
{ {
@@ -18,52 +17,67 @@ public class CreateGroupDiscussionEndpoint(KnotsDbContext db)
{ {
int currentUserId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!); int currentUserId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
if (req.Usernames == null || req.Usernames.Count == 0) if (req.Usernames == null || req.Usernames.Count == 0)
{ {
await SendErrorsAsync(400, ct); await SendErrorsAsync(400, ct);
return; return;
} }
List<Models.User> targets = await db.Users List<Models.User> targets = await db.Users
.Where(u => req.Usernames.Contains(u.Username!)) .Where(u => req.Usernames.Contains(u.Username!))
.ToListAsync(ct); .ToListAsync(ct);
if (targets.Count != req.Usernames.Count) if (targets.Count != req.Usernames.Count)
{ {
await SendNotFoundAsync(ct); // un ou plusieurs utilisateurs introuvables await SendNotFoundAsync(ct);
return; return;
} }
if (targets.Any(t => t.Id == currentUserId)) if (targets.Any(t => t.Id == currentUserId))
{ {
await SendErrorsAsync(400, ct); // pas de discussion avec soi-même await SendErrorsAsync(400, ct);
return; return;
} }
int totalMembers = targets.Count + 1;
List<UserDiscussion> members = targets
.Select(t => new UserDiscussion { UserId = t.Id })
.ToList();
members.Add(new UserDiscussion { UserId = currentUserId });
Models.Discussion discussion = new() Models.Discussion discussion = new()
{ {
IsGroup = true, IsGroup = true,
UserDiscussions = members UserDiscussions = targets
.Select(t => new UserDiscussion { UserId = t.Id })
.Append(new UserDiscussion { UserId = currentUserId })
.ToList()
}; };
db.Discussions.Add(discussion); db.Discussions.Add(discussion);
await db.SaveChangesAsync(ct); // discussion.Id disponible
Models.Group group = new()
{
Name = req.GroupName,
MembersAmount = totalMembers,
DiscussionId = discussion.Id,
GroupUsers = targets
.Select(t => new GroupUser { UserId = t.Id })
.Append(new GroupUser { UserId = currentUserId })
.ToList()
};
db.Groups.Add(group);
await db.SaveChangesAsync(ct); // group.Id disponible
discussion.GroupId = group.Id;
await db.SaveChangesAsync(ct); await db.SaveChangesAsync(ct);
await SendOkAsync(new GetDiscussionDto await SendOkAsync(new GetDiscussionDto
{ {
Id = discussion.Id, Id = discussion.Id,
IsGroup = true, IsGroup = true,
Name = req.GroupName, Name = group.Name,
MembersCount = members.Count MembersCount = totalMembers
}, ct); }, ct);
} }
} }
@@ -0,0 +1,380 @@
// <auto-generated />
using System;
using Knots;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace Knots.Migrations
{
[DbContext(typeof(KnotsDbContext))]
[Migration("20260610224937_FixGroupDiscussion")]
partial class FixGroupDiscussion
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.25")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Knots.Models.Discussion", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime2");
b.Property<int?>("GroupId")
.HasColumnType("int");
b.Property<bool>("IsGroup")
.HasColumnType("bit");
b.HasKey("Id");
b.HasIndex("GroupId");
b.ToTable("Discussions");
});
modelBuilder.Entity("Knots.Models.Group", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("DiscussionId")
.HasColumnType("int");
b.Property<int>("MembersAmount")
.HasColumnType("int");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ProfilePicture")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("DiscussionId");
b.ToTable("Groups");
});
modelBuilder.Entity("Knots.Models.GroupUser", b =>
{
b.Property<int>("GroupId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.Property<int?>("RoleId")
.HasColumnType("int");
b.HasKey("GroupId", "UserId");
b.HasIndex("RoleId");
b.HasIndex("UserId");
b.ToTable("GroupUsers");
});
modelBuilder.Entity("Knots.Models.Key", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("EnKey")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("Id");
b.ToTable("Keys");
});
modelBuilder.Entity("Knots.Models.Message", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AuthorId")
.HasColumnType("int");
b.Property<string>("Contenu")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<DateTime>("Date")
.HasColumnType("datetime2");
b.Property<int>("DiscussionId")
.HasColumnType("int");
b.Property<int?>("GroupId")
.HasColumnType("int");
b.Property<int?>("KeyId")
.HasColumnType("int");
b.Property<bool>("Type")
.HasColumnType("bit");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("DiscussionId");
b.HasIndex("GroupId");
b.HasIndex("KeyId");
b.HasIndex("UserId");
b.ToTable("Messages");
});
modelBuilder.Entity("Knots.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Libelle")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("Id");
b.ToTable("Roles");
});
modelBuilder.Entity("Knots.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Description")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(70)
.HasColumnType("nvarchar(70)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ProfilePicture")
.HasColumnType("nvarchar(max)");
b.Property<int?>("RoleId")
.HasColumnType("int");
b.Property<string>("Tel")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("Users");
});
modelBuilder.Entity("Knots.Models.UserDiscussion", b =>
{
b.Property<int>("UserId")
.HasColumnType("int");
b.Property<int>("DiscussionId")
.HasColumnType("int");
b.HasKey("UserId", "DiscussionId");
b.HasIndex("DiscussionId");
b.ToTable("UserDiscussions");
});
modelBuilder.Entity("Knots.Models.Discussion", b =>
{
b.HasOne("Knots.Models.Group", "Group")
.WithMany()
.HasForeignKey("GroupId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Group");
});
modelBuilder.Entity("Knots.Models.Group", b =>
{
b.HasOne("Knots.Models.Discussion", "Discussion")
.WithMany()
.HasForeignKey("DiscussionId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Discussion");
});
modelBuilder.Entity("Knots.Models.GroupUser", b =>
{
b.HasOne("Knots.Models.Group", "Group")
.WithMany("GroupUsers")
.HasForeignKey("GroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Knots.Models.Role", "Role")
.WithMany("GroupUsers")
.HasForeignKey("RoleId");
b.HasOne("Knots.Models.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Group");
b.Navigation("Role");
b.Navigation("User");
});
modelBuilder.Entity("Knots.Models.Message", b =>
{
b.HasOne("Knots.Models.Discussion", "Discussion")
.WithMany("Messages")
.HasForeignKey("DiscussionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Knots.Models.Group", "Group")
.WithMany()
.HasForeignKey("GroupId");
b.HasOne("Knots.Models.Key", "Key")
.WithMany("Messages")
.HasForeignKey("KeyId");
b.HasOne("Knots.Models.User", "User")
.WithMany("Messages")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Discussion");
b.Navigation("Group");
b.Navigation("Key");
b.Navigation("User");
});
modelBuilder.Entity("Knots.Models.User", b =>
{
b.HasOne("Knots.Models.Role", "Role")
.WithMany("Users")
.HasForeignKey("RoleId");
b.Navigation("Role");
});
modelBuilder.Entity("Knots.Models.UserDiscussion", b =>
{
b.HasOne("Knots.Models.Discussion", "Discussion")
.WithMany("UserDiscussions")
.HasForeignKey("DiscussionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Knots.Models.User", "User")
.WithMany("UserDiscussions")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Discussion");
b.Navigation("User");
});
modelBuilder.Entity("Knots.Models.Discussion", b =>
{
b.Navigation("Messages");
b.Navigation("UserDiscussions");
});
modelBuilder.Entity("Knots.Models.Group", b =>
{
b.Navigation("GroupUsers");
});
modelBuilder.Entity("Knots.Models.Key", b =>
{
b.Navigation("Messages");
});
modelBuilder.Entity("Knots.Models.Role", b =>
{
b.Navigation("GroupUsers");
b.Navigation("Users");
});
modelBuilder.Entity("Knots.Models.User", b =>
{
b.Navigation("Messages");
b.Navigation("UserDiscussions");
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,21 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Knots.Migrations
{
/// <inheritdoc />
public partial class FixGroupDiscussion : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "AuthorId",
table: "Messages",
type: "int",
nullable: false,
defaultValue: 0);
}
}
}
+75 -11
View File
@@ -33,11 +33,16 @@ namespace Knots.Migrations
b.Property<DateTime>("CreatedAt") b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
b.Property<int?>("GroupId")
.HasColumnType("int");
b.Property<bool>("IsGroup") b.Property<bool>("IsGroup")
.HasColumnType("bit"); .HasColumnType("bit");
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("GroupId");
b.ToTable("Discussions"); b.ToTable("Discussions");
}); });
@@ -52,9 +57,6 @@ namespace Knots.Migrations
b.Property<int>("DiscussionId") b.Property<int>("DiscussionId")
.HasColumnType("int"); .HasColumnType("int");
b.Property<int>("KeyId")
.HasColumnType("int");
b.Property<int>("MembersAmount") b.Property<int>("MembersAmount")
.HasColumnType("int"); .HasColumnType("int");
@@ -68,12 +70,31 @@ namespace Knots.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("DiscussionId") b.HasIndex("DiscussionId");
.IsUnique();
b.ToTable("Groups"); b.ToTable("Groups");
}); });
modelBuilder.Entity("Knots.Models.GroupUser", b =>
{
b.Property<int>("GroupId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.Property<int?>("RoleId")
.HasColumnType("int");
b.HasKey("GroupId", "UserId");
b.HasIndex("RoleId");
b.HasIndex("UserId");
b.ToTable("GroupUsers");
});
modelBuilder.Entity("Knots.Models.Key", b => modelBuilder.Entity("Knots.Models.Key", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@@ -100,6 +121,9 @@ namespace Knots.Migrations
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AuthorId")
.HasColumnType("int");
b.Property<string>("Contenu") b.Property<string>("Contenu")
.IsRequired() .IsRequired()
.HasMaxLength(1000) .HasMaxLength(1000)
@@ -212,17 +236,52 @@ namespace Knots.Migrations
b.ToTable("UserDiscussions"); b.ToTable("UserDiscussions");
}); });
modelBuilder.Entity("Knots.Models.Discussion", b =>
{
b.HasOne("Knots.Models.Group", "Group")
.WithMany()
.HasForeignKey("GroupId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Group");
});
modelBuilder.Entity("Knots.Models.Group", b => modelBuilder.Entity("Knots.Models.Group", b =>
{ {
b.HasOne("Knots.Models.Discussion", "Discussion") b.HasOne("Knots.Models.Discussion", "Discussion")
.WithOne("Group") .WithMany()
.HasForeignKey("Knots.Models.Group", "DiscussionId") .HasForeignKey("DiscussionId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Restrict)
.IsRequired(); .IsRequired();
b.Navigation("Discussion"); b.Navigation("Discussion");
}); });
modelBuilder.Entity("Knots.Models.GroupUser", b =>
{
b.HasOne("Knots.Models.Group", "Group")
.WithMany("GroupUsers")
.HasForeignKey("GroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Knots.Models.Role", "Role")
.WithMany("GroupUsers")
.HasForeignKey("RoleId");
b.HasOne("Knots.Models.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Group");
b.Navigation("Role");
b.Navigation("User");
});
modelBuilder.Entity("Knots.Models.Message", b => modelBuilder.Entity("Knots.Models.Message", b =>
{ {
b.HasOne("Knots.Models.Discussion", "Discussion") b.HasOne("Knots.Models.Discussion", "Discussion")
@@ -274,7 +333,7 @@ namespace Knots.Migrations
b.HasOne("Knots.Models.User", "User") b.HasOne("Knots.Models.User", "User")
.WithMany("UserDiscussions") .WithMany("UserDiscussions")
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Restrict)
.IsRequired(); .IsRequired();
b.Navigation("Discussion"); b.Navigation("Discussion");
@@ -284,13 +343,16 @@ namespace Knots.Migrations
modelBuilder.Entity("Knots.Models.Discussion", b => modelBuilder.Entity("Knots.Models.Discussion", b =>
{ {
b.Navigation("Group");
b.Navigation("Messages"); b.Navigation("Messages");
b.Navigation("UserDiscussions"); b.Navigation("UserDiscussions");
}); });
modelBuilder.Entity("Knots.Models.Group", b =>
{
b.Navigation("GroupUsers");
});
modelBuilder.Entity("Knots.Models.Key", b => modelBuilder.Entity("Knots.Models.Key", b =>
{ {
b.Navigation("Messages"); b.Navigation("Messages");
@@ -298,6 +360,8 @@ namespace Knots.Migrations
modelBuilder.Entity("Knots.Models.Role", b => modelBuilder.Entity("Knots.Models.Role", b =>
{ {
b.Navigation("GroupUsers");
b.Navigation("Users"); b.Navigation("Users");
}); });
+214 -12
View File
@@ -15,6 +15,7 @@
"Microsoft.AspNetCore.Authentication": "2.3.11", "Microsoft.AspNetCore.Authentication": "2.3.11",
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.28", "Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.28",
"Microsoft.AspNetCore.OpenApi": "8.0.25", "Microsoft.AspNetCore.OpenApi": "8.0.25",
"Microsoft.AspNetCore.SignalR": "1.2.11",
"Microsoft.EntityFrameworkCore": "8.0.25", "Microsoft.EntityFrameworkCore": "8.0.25",
"Microsoft.EntityFrameworkCore.Design": "8.0.25", "Microsoft.EntityFrameworkCore.Design": "8.0.25",
"Microsoft.EntityFrameworkCore.SqlServer": "8.0.25", "Microsoft.EntityFrameworkCore.SqlServer": "8.0.25",
@@ -173,6 +174,24 @@
} }
} }
}, },
"Microsoft.AspNetCore.Authorization/2.3.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.Abstractions": "2.3.9",
"Microsoft.AspNetCore.Authorization": "2.3.0"
}
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "2.3.0",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {}, "Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {},
"Microsoft.AspNetCore.DataProtection/2.3.10": { "Microsoft.AspNetCore.DataProtection/2.3.10": {
"dependencies": { "dependencies": {
@@ -216,6 +235,26 @@
"System.Text.Encodings.Web": "8.0.0" "System.Text.Encodings.Web": "8.0.0"
} }
}, },
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Authorization.Policy": "2.3.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "2.3.9",
"Microsoft.AspNetCore.Http": "2.3.10",
"Microsoft.AspNetCore.Http.Connections.Common": "1.2.0",
"Microsoft.AspNetCore.Routing": "2.3.0",
"Microsoft.AspNetCore.WebSockets": "2.3.10",
"Newtonsoft.Json": "13.0.3",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
}
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Newtonsoft.Json": "13.0.3",
"System.Buffers": "4.6.0",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": { "Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.9", "Microsoft.AspNetCore.Http.Abstractions": "2.3.9",
@@ -240,6 +279,62 @@
} }
} }
}, },
"Microsoft.AspNetCore.Routing/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.10",
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.9"
}
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"dependencies": {
"Microsoft.AspNetCore.Http.Connections": "1.2.0",
"Microsoft.AspNetCore.SignalR.Core": "1.2.0",
"Microsoft.AspNetCore.WebSockets": "2.3.10",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.0",
"Newtonsoft.Json": "13.0.3",
"System.Buffers": "4.6.0"
}
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Authorization": "2.3.0",
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"System.IO.Pipelines": "8.0.0",
"System.Reflection.Emit": "4.7.0",
"System.Threading.Channels": "8.0.0"
}
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.10",
"Microsoft.Extensions.Options": "10.0.0",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
}
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": { "Microsoft.AspNetCore.WebUtilities/2.3.9": {
"dependencies": { "dependencies": {
"Microsoft.Net.Http.Headers": "2.3.9", "Microsoft.Net.Http.Headers": "2.3.9",
@@ -424,8 +519,8 @@
"Microsoft.Bcl.AsyncInterfaces": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"Microsoft.CodeAnalysis.Common": "4.5.0", "Microsoft.CodeAnalysis.Common": "4.5.0",
"System.Composition": "6.0.0", "System.Composition": "6.0.0",
"System.IO.Pipelines": "6.0.3", "System.IO.Pipelines": "8.0.0",
"System.Threading.Channels": "6.0.0" "System.Threading.Channels": "8.0.0"
}, },
"runtime": { "runtime": {
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": { "lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": {
@@ -1218,7 +1313,7 @@
} }
} }
}, },
"System.IO.Pipelines/6.0.3": {}, "System.IO.Pipelines/8.0.0": {},
"System.Memory/4.5.4": {}, "System.Memory/4.5.4": {},
"System.Memory.Data/1.0.2": { "System.Memory.Data/1.0.2": {
"dependencies": { "dependencies": {
@@ -1232,7 +1327,16 @@
} }
} }
}, },
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"runtime": {
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.dll": {
"assemblyVersion": "5.1.0.0",
"fileVersion": "5.100.24.56208"
}
}
},
"System.Numerics.Vectors/4.5.0": {}, "System.Numerics.Vectors/4.5.0": {},
"System.Reflection.Emit/4.7.0": {},
"System.Reflection.Metadata/6.0.1": { "System.Reflection.Metadata/6.0.1": {
"dependencies": { "dependencies": {
"System.Collections.Immutable": "6.0.0" "System.Collections.Immutable": "6.0.0"
@@ -1327,7 +1431,7 @@
}, },
"System.Text.Encodings.Web/8.0.0": {}, "System.Text.Encodings.Web/8.0.0": {},
"System.Text.Json/8.0.5": {}, "System.Text.Json/8.0.5": {},
"System.Threading.Channels/6.0.0": {}, "System.Threading.Channels/8.0.0": {},
"System.Threading.Tasks.Extensions/4.5.4": {}, "System.Threading.Tasks.Extensions/4.5.4": {},
"System.Windows.Extensions/6.0.0": { "System.Windows.Extensions/6.0.0": {
"dependencies": { "dependencies": {
@@ -1462,6 +1566,27 @@
"path": "microsoft.aspnetcore.authentication.jwtbearer/8.0.28", "path": "microsoft.aspnetcore.authentication.jwtbearer/8.0.28",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.8.0.28.nupkg.sha512" "hashPath": "microsoft.aspnetcore.authentication.jwtbearer.8.0.28.nupkg.sha512"
}, },
"Microsoft.AspNetCore.Authorization/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2/aBgLqBXva/+w8pzRNY8ET43Gi+dr1gv/7ySfbsh23lTK6IAgID5MGUEa1hreNIF+0XpW4tX7QwVe70+YvaPg==",
"path": "microsoft.aspnetcore.authorization/2.3.0",
"hashPath": "microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vn31uQ1dA1MIV2WNNDOOOm88V5KgR9esfi0LyQ6eVaGq2h0Yw+R29f5A6qUNJt+RccS3qkYayylAy9tP1wV+7Q==",
"path": "microsoft.aspnetcore.authorization.policy/2.3.0",
"hashPath": "microsoft.aspnetcore.authorization.policy.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ULFSa+/L+WiAHVlIFHyg0OmHChU9Hx+K+xnt0hbIU5XmT1EGy0pNDx23QAzDtAy9jxQrTG6MX0MdvMeU4D4c7w==",
"path": "microsoft.aspnetcore.connections.abstractions/2.3.0",
"hashPath": "microsoft.aspnetcore.connections.abstractions.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": { "Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@@ -1511,6 +1636,20 @@
"path": "microsoft.aspnetcore.http.abstractions/2.3.9", "path": "microsoft.aspnetcore.http.abstractions/2.3.9",
"hashPath": "microsoft.aspnetcore.http.abstractions.2.3.9.nupkg.sha512" "hashPath": "microsoft.aspnetcore.http.abstractions.2.3.9.nupkg.sha512"
}, },
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VYMCOLvdT0y3O9lk4jUuIs8+re7u5+i+ka6ZZ6fIzSJ94c/JeMnAOOg39EB2i4crPXvLoiSdzKWlNPJgTbCZ2g==",
"path": "microsoft.aspnetcore.http.connections/1.2.0",
"hashPath": "microsoft.aspnetcore.http.connections.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yUA7eg6kv7Wbz5TCW4PqS5/kYE5VxUIEDvoxjw4p1RwS2LGm84F9fBtM0mD6wrRfiv1NUyJ7WBjn3PWd/ccO+w==",
"path": "microsoft.aspnetcore.http.connections.common/1.2.0",
"hashPath": "microsoft.aspnetcore.http.connections.common.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": { "Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@@ -1532,6 +1671,55 @@
"path": "microsoft.aspnetcore.openapi/8.0.25", "path": "microsoft.aspnetcore.openapi/8.0.25",
"hashPath": "microsoft.aspnetcore.openapi.8.0.25.nupkg.sha512" "hashPath": "microsoft.aspnetcore.openapi.8.0.25.nupkg.sha512"
}, },
"Microsoft.AspNetCore.Routing/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-no5/VC0CAQuT4PK4rp2K5fqwuSfzr2mdB6m1XNfWVhHnwzpRQzKAu9flChiT/JTLKwVI0Vq2MSmSW2OFMDCNXg==",
"path": "microsoft.aspnetcore.routing/2.3.0",
"hashPath": "microsoft.aspnetcore.routing.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZkFpUrSmp6TocxZLBEX3IBv5dPMbQuMs6L/BPl0WRfn32UVOtNYJQ0bLdh3cL9LMV0rmTW/5R0w8CBYxr0AOUw==",
"path": "microsoft.aspnetcore.routing.abstractions/2.3.0",
"hashPath": "microsoft.aspnetcore.routing.abstractions.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fq/EW3G4S+1Xo3aX042Geb/mm+cqStB7cw7FmXLhgpXbsO6dXbU/78URRqpiMozAHjpqSK9BVRkhYhnCg5fgew==",
"path": "microsoft.aspnetcore.signalr/1.2.11",
"hashPath": "microsoft.aspnetcore.signalr.1.2.11.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FZeXIaoWqe145ZPdfiptwkw/sP1BX1UD0706GNBwwoaFiKsNbLEl/Trhj2+idlp3qbX1BEwkQesKNxkopVY5Xg==",
"path": "microsoft.aspnetcore.signalr.common/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.common.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eZTuMkSDw1uwjhLhJbMxgW2Cuyxfn0Kfqm8OBmqvuzE9Qc/VVzh8dGrAp2F9Pk7XKTDHmlhc5RTLcPPAZ5PSZw==",
"path": "microsoft.aspnetcore.signalr.core/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.core.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hNvZ7kQxp5Udqd/IFWViU35bUJvi4xnNzjkF28HRvrdrS7JNsIASTvMqArP6HLQUc3j6nlUOeShNhVmgI1wzHg==",
"path": "microsoft.aspnetcore.signalr.protocols.json/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.protocols.json.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-m0wkzmyKxi0J42ldZ6P+YCnEO3Djvoyw4vDoROwPM8J/1/H19/qoYNgYmQkrwOD5OAtc6GFcnifPUOE6XqeQZA==",
"path": "microsoft.aspnetcore.websockets/2.3.10",
"hashPath": "microsoft.aspnetcore.websockets.2.3.10.nupkg.sha512"
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": { "Microsoft.AspNetCore.WebUtilities/2.3.9": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@@ -2071,12 +2259,12 @@
"path": "system.identitymodel.tokens.jwt/7.1.2", "path": "system.identitymodel.tokens.jwt/7.1.2",
"hashPath": "system.identitymodel.tokens.jwt.7.1.2.nupkg.sha512" "hashPath": "system.identitymodel.tokens.jwt.7.1.2.nupkg.sha512"
}, },
"System.IO.Pipelines/6.0.3": { "System.IO.Pipelines/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==", "sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"path": "system.io.pipelines/6.0.3", "path": "system.io.pipelines/8.0.0",
"hashPath": "system.io.pipelines.6.0.3.nupkg.sha512" "hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
}, },
"System.Memory/4.5.4": { "System.Memory/4.5.4": {
"type": "package", "type": "package",
@@ -2092,6 +2280,13 @@
"path": "system.memory.data/1.0.2", "path": "system.memory.data/1.0.2",
"hashPath": "system.memory.data.1.0.2.nupkg.sha512" "hashPath": "system.memory.data.1.0.2.nupkg.sha512"
}, },
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cVTT/Zw4JuUeX8H0tdWii0OMHsA5MY2PaFYOq/Hstw0jk479jZ+f8baCicWFNzJlCPWAe0uoNCELoB5eNmaMqA==",
"path": "system.net.websockets.websocketprotocol/5.1.0",
"hashPath": "system.net.websockets.websocketprotocol.5.1.0.nupkg.sha512"
},
"System.Numerics.Vectors/4.5.0": { "System.Numerics.Vectors/4.5.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@@ -2099,6 +2294,13 @@
"path": "system.numerics.vectors/4.5.0", "path": "system.numerics.vectors/4.5.0",
"hashPath": "system.numerics.vectors.4.5.0.nupkg.sha512" "hashPath": "system.numerics.vectors.4.5.0.nupkg.sha512"
}, },
"System.Reflection.Emit/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
"path": "system.reflection.emit/4.7.0",
"hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
},
"System.Reflection.Metadata/6.0.1": { "System.Reflection.Metadata/6.0.1": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@@ -2190,12 +2392,12 @@
"path": "system.text.json/8.0.5", "path": "system.text.json/8.0.5",
"hashPath": "system.text.json.8.0.5.nupkg.sha512" "hashPath": "system.text.json.8.0.5.nupkg.sha512"
}, },
"System.Threading.Channels/6.0.0": { "System.Threading.Channels/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==", "sha512": "sha512-CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==",
"path": "system.threading.channels/6.0.0", "path": "system.threading.channels/8.0.0",
"hashPath": "system.threading.channels.6.0.0.nupkg.sha512" "hashPath": "system.threading.channels.8.0.0.nupkg.sha512"
}, },
"System.Threading.Tasks.Extensions/4.5.4": { "System.Threading.Tasks.Extensions/4.5.4": {
"type": "package", "type": "package",
+1 -1
View File
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Knots")] [assembly: System.Reflection.AssemblyCompanyAttribute("Knots")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e6021dcc619fd4151caff82644b9bda369ef15fd")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c23cc4a03ae52f47eafbe25e0cc80cb4fb9f6ea5")]
[assembly: System.Reflection.AssemblyProductAttribute("Knots")] [assembly: System.Reflection.AssemblyProductAttribute("Knots")]
[assembly: System.Reflection.AssemblyTitleAttribute("Knots")] [assembly: System.Reflection.AssemblyTitleAttribute("Knots")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
c634a46dc11c9265972dbfd647e5dc8eb04ef78a5549341a950a2b63f97dc490 e5304a727d82ba542c9bb954ebc4222e904b2567df2dbba7f580fb779a556b3e
@@ -1 +1 @@
bab9e1ed6ec5ae3422f4377cfa8a1795b3c9881cbfdada74a84426e15b5819ff 1afb5c57f375954b5501d52f6ccbfcdd0c9a4a7d75abca85439c878c12264607
@@ -519,3 +519,4 @@ C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.pdb
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.genruntimeconfig.cache C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.genruntimeconfig.cache
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\ref\Knots.dll C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\ref\Knots.dll
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Net.WebSockets.WebSocketProtocol.dll C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Net.WebSockets.WebSocketProtocol.dll
C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Net.WebSockets.WebSocketProtocol.dll
@@ -1 +1 @@
2a517ff3e626fe122f9253056129ac168f6d5d47ce545c1f8a40a45a4c220257 a8415ff929068fa8f2ff3412a5ec6274995459d8b2f0bd67ac17c8c58e30ac97
+1 -1
View File
@@ -1 +1 @@
17811297224323847 17811341755994334
+1 -1
View File
@@ -1 +1 @@
17811297410231701 17811341972143664