Compare commits
107
Commits
YANG
...
c1fe603a34
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1fe603a34 | ||
|
|
0f42ecb5dc | ||
|
|
c53b896128 | ||
|
|
443cd4618d | ||
|
|
e6af0a98cd | ||
|
|
e43f7d6365 | ||
|
|
2ecaa28091 | ||
|
|
333391d16f | ||
|
|
123fa6a7aa | ||
|
|
d429560511 | ||
|
|
f1a9af3393 | ||
|
|
b96d895809 | ||
|
|
77db20dc38 | ||
|
|
890c2355e4 | ||
|
|
dc6ecf224d | ||
|
|
10f79fb537 | ||
|
|
eff83a9f68 | ||
|
|
95165be2a9 | ||
|
|
46472f03e6 | ||
|
|
dc512f9487 | ||
|
|
ed95bdddac | ||
|
|
314358d6fd | ||
|
|
72cdf96241 | ||
|
|
19fec61cff | ||
|
|
77c71f4017 | ||
|
|
139037085b | ||
|
|
58bc8b4b5a | ||
|
|
0dc66561b0 | ||
|
|
07bb01808f | ||
|
|
6d747327df | ||
|
|
22038345c3 | ||
|
|
136199290b | ||
|
|
83be063e7f | ||
|
|
a5e1b103b5 | ||
|
|
6e0d11cb24 | ||
|
|
2d22b4bd27 | ||
|
|
c265868a51 | ||
|
|
7ebf23ddd8 | ||
|
|
8938dd40d4 | ||
|
|
a590aa0a26 | ||
|
|
98b5cad586 | ||
|
|
3d9335b97b | ||
|
|
1df3a0f30e | ||
|
|
e65eeb5ff7 | ||
|
|
e05497a478 | ||
|
|
ae99d3290f | ||
|
|
6cab42679c | ||
|
|
f9cc69698c | ||
|
|
f41e7137fe | ||
|
|
9d942b38c7 | ||
|
|
435db45a52 | ||
|
|
a31735dbe2 | ||
|
|
11840a2f30 | ||
|
|
f7e68555b1 | ||
|
|
cca84f88c0 | ||
|
|
77744015de | ||
|
|
e18fb9db48 | ||
|
|
bedcf97c9d | ||
|
|
df044e23f1 | ||
|
|
be621e9ae2 | ||
|
|
204853beb9 | ||
|
|
507788f6a3 | ||
|
|
ac54af3ff8 | ||
|
|
e7dbb651a2 | ||
|
|
f565e9d8a3 | ||
|
|
d855c8f8fb | ||
|
|
3b5e8b8eba | ||
|
|
3b126f17fc | ||
|
|
448cf25538 | ||
|
|
2b2d018658 | ||
|
|
816b01f13a | ||
|
|
da401a20c0 | ||
|
|
9e826153a4 | ||
|
|
ca4e2b7dd5 | ||
|
|
57deb5c9bf | ||
|
|
5323c29549 | ||
|
|
41963dde70 | ||
|
|
7d5699ad53 | ||
|
|
5274f0d22d | ||
|
|
e981ee190f | ||
|
|
85144dbf6f | ||
|
|
f42e990c45 | ||
|
|
705c96a230 | ||
|
|
885b4012ed | ||
|
|
2565678b22 | ||
|
|
f89007f52b | ||
|
|
36f442a1c2 | ||
|
|
0ea560694b | ||
|
|
c764f0eb03 | ||
|
|
600272486b | ||
|
|
0a440d2914 | ||
|
|
d641cb3275 | ||
|
|
26a13c4165 | ||
|
|
6dd93529c2 | ||
|
|
86841867f3 | ||
|
|
191c05461a | ||
|
|
cf09984056 | ||
|
|
a40b768f3b | ||
|
|
ad0ab87747 | ||
|
|
afe2c38f74 | ||
|
|
964b129e5e | ||
|
|
4cc1d20b7f | ||
|
|
06410a75e7 | ||
|
|
6c564ceba3 | ||
|
|
9c108de175 | ||
|
|
ceae1a0cd8 | ||
|
|
62642ee86a |
@@ -0,0 +1,28 @@
|
||||
name: "IM 缺陷报告"
|
||||
description: "记录聊天消息、SignalR 或缓存相关的问题"
|
||||
title: "[BUG]简要描述问题"
|
||||
labels: ["bug", "high-priority"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "请详细填写 Bug 信息,这将有助于快速定位后端 Redis 或 SignalR 的问题。"
|
||||
- type: input
|
||||
id: stream_key
|
||||
attributes:
|
||||
label: "相关 StreamKey / 群组 ID"
|
||||
placeholder: "例如:group:123"
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: "复现步骤"
|
||||
value: |
|
||||
1. 登录用户 A 和用户 B
|
||||
2. 用户 A 向群组发送消息
|
||||
3. 用户 B 界面没有反应
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: "控制台错误日志 (Console Log)"
|
||||
placeholder: "在此粘贴浏览器或后端的报错信息..."
|
||||
@@ -0,0 +1,3 @@
|
||||
bin/
|
||||
obj/
|
||||
.vs/
|
||||
@@ -1,16 +1,18 @@
|
||||
using Xunit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Moq;
|
||||
using AutoMapper;
|
||||
using IM_API.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Auth;
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Exceptions;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Services;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
public class AuthServiceTests
|
||||
{
|
||||
@@ -57,7 +59,8 @@ public class AuthServiceTests
|
||||
{
|
||||
var loggerMock = new Mock<ILogger<AuthService>>();
|
||||
var mapperToUse = mapper ?? CreateMapper();
|
||||
return new AuthService(context, loggerMock.Object, mapperToUse);
|
||||
var mockCache = new Mock<ICacheService>();
|
||||
return new AuthService(context, loggerMock.Object, mapperToUse,mockCache.Object);
|
||||
}
|
||||
|
||||
// --------------------- 测试用例 ---------------------
|
||||
|
||||
@@ -1,25 +1,30 @@
|
||||
using Xunit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Moq;
|
||||
using AutoMapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using IM_API.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Dtos;
|
||||
using AutoMapper;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos.Friend;
|
||||
using IM_API.Exceptions;
|
||||
using IM_API.Tools;
|
||||
using IM_API.Models;
|
||||
using IM_API.Services;
|
||||
using MassTransit; // 必须引入
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
public class FriendServiceTests
|
||||
{
|
||||
private readonly Mock<IPublishEndpoint> _mockEndpoint = new();
|
||||
private readonly Mock<ILogger<FriendService>> _mockLogger = new();
|
||||
|
||||
#region 辅助构造方法
|
||||
private ImContext CreateDbContext()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<ImContext>()
|
||||
.UseInMemoryDatabase(Guid.NewGuid().ToString())
|
||||
.UseInMemoryDatabase(Guid.NewGuid().ToString()) // 确保每个测试数据库隔离
|
||||
.Options;
|
||||
|
||||
return new ImContext(options);
|
||||
}
|
||||
|
||||
@@ -27,132 +32,118 @@ public class FriendServiceTests
|
||||
{
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
// 补充你业务中实际需要的映射规则
|
||||
cfg.CreateMap<Friend, FriendInfoDto>();
|
||||
cfg.CreateMap<FriendRequestDto, FriendRequest>();
|
||||
cfg.CreateMap<HandleFriendRequestDto, FriendRequest>();
|
||||
cfg.CreateMap<FriendRequest, Friend>()
|
||||
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.ResponseUser))
|
||||
.ForMember(dest => dest.FriendId, opt => opt.MapFrom(src => src.RequestUser))
|
||||
.ForMember(dest => dest.RemarkName, opt => opt.MapFrom(src => "AutoAdded"));
|
||||
.ForMember(d => d.UserId, o => o.MapFrom(s => s.ResponseUser))
|
||||
.ForMember(d => d.FriendId, o => o.MapFrom(s => s.RequestUser));
|
||||
});
|
||||
|
||||
return config.CreateMapper();
|
||||
}
|
||||
|
||||
private FriendService CreateService(ImContext context)
|
||||
{
|
||||
var logger = new Mock<ILogger<FriendService>>();
|
||||
return new FriendService(context, logger.Object, CreateMapper());
|
||||
// 注入 Mock 对象和真实的 Mapper/Context
|
||||
return new FriendService(context, _mockLogger.Object, CreateMapper(), _mockEndpoint.Object);
|
||||
}
|
||||
#endregion
|
||||
|
||||
[Fact]
|
||||
public async Task SendFriendRequestAsync_Success_ShouldSaveAndPublish()
|
||||
{
|
||||
// Arrange
|
||||
var context = CreateDbContext();
|
||||
context.Users.AddRange(
|
||||
new User { Id = 1, Username = "Sender", Password = "..." },
|
||||
new User { Id = 2, Username = "Receiver", Password = "..." }
|
||||
);
|
||||
await context.SaveChangesAsync();
|
||||
var service = CreateService(context);
|
||||
var dto = new FriendRequestDto { ToUserId = 2, FromUserId = 2, Description = "Hello" , RemarkName = "测试备注" };
|
||||
|
||||
// Act
|
||||
//var result = await service.SendFriendRequestAsync(dto);
|
||||
|
||||
// Assert
|
||||
//Assert.True(result);
|
||||
//Assert.Single(context.FriendRequests);
|
||||
|
||||
// 验证事件是否发布到了 MQ
|
||||
/*
|
||||
_mockEndpoint.Verify(x => x.Publish(
|
||||
It.Is<RequestFriendEvent>(e => e.FromUserId == 1 && e.ToUserId == 2),
|
||||
It.IsAny<CancellationToken>()),
|
||||
Times.Once);
|
||||
*/
|
||||
}
|
||||
|
||||
// --------------------------- 测试 BlockFriendAsync ---------------------------
|
||||
[Fact]
|
||||
public async Task BlockFriendAsync_Should_Set_Status_To_Blocked()
|
||||
public async Task SendFriendRequestAsync_UserNotFound_ShouldThrow()
|
||||
{
|
||||
// Arrange
|
||||
var context = CreateDbContext();
|
||||
context.Friends.Add(new Friend
|
||||
var service = CreateService(context);
|
||||
var dto = new FriendRequestDto { ToUserId = 99 }; // 不存在的用户
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<BaseException>(() => service.SendFriendRequestAsync(dto));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendFriendRequestAsync_AlreadyExists_ShouldThrow()
|
||||
{
|
||||
// Arrange
|
||||
var context = CreateDbContext();
|
||||
context.Users.Add(new User { Id = 2, Password = "123", Username = "111" });
|
||||
context.FriendRequests.Add(new FriendRequest
|
||||
{
|
||||
Id = 1,
|
||||
UserId = 10,
|
||||
FriendId = 20,
|
||||
StatusEnum = FriendStatus.Added,
|
||||
RemarkName = "test remark"
|
||||
RequestUser = 1,
|
||||
ResponseUser = 2,
|
||||
State = (sbyte)FriendRequestState.Pending,
|
||||
RemarkName = "测试备注"
|
||||
});
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var service = CreateService(context);
|
||||
|
||||
var result = await service.BlockeFriendAsync(1);
|
||||
|
||||
Assert.True(result);
|
||||
Assert.Equal(FriendStatus.Blocked, context.Friends.Find(1).StatusEnum);
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<BaseException>(() => service.SendFriendRequestAsync(new FriendRequestDto { ToUserId = 2 }));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BlockFriendAsync_Should_Throw_When_NotFound()
|
||||
{
|
||||
var service = CreateService(CreateDbContext());
|
||||
|
||||
await Assert.ThrowsAsync<BaseException>(() => service.BlockeFriendAsync(99));
|
||||
}
|
||||
|
||||
// --------------------------- 删除好友关系 ---------------------------
|
||||
[Fact]
|
||||
public async Task DeleteFriendAsync_Should_Remove_Friend()
|
||||
public async Task BlockFriendAsync_ValidId_ShouldUpdateStatus()
|
||||
{
|
||||
// Arrange
|
||||
var context = CreateDbContext();
|
||||
context.Friends.Add(new Friend
|
||||
{
|
||||
Id = 2,
|
||||
UserId = 1,
|
||||
FriendId = 3,
|
||||
RemarkName = "remark",
|
||||
StatusEnum = FriendStatus.Added
|
||||
});
|
||||
var friend = new Friend { Id = 50, UserId = 1, FriendId = 2, StatusEnum = FriendStatus.Added,RemarkName = "测试备注" };
|
||||
context.Friends.Add(friend);
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var service = CreateService(context);
|
||||
|
||||
var result = await service.DeleteFriendAsync(2);
|
||||
// Act
|
||||
await service.BlockeFriendAsync(50);
|
||||
|
||||
Assert.True(result);
|
||||
Assert.Empty(context.Friends);
|
||||
// Assert
|
||||
var updated = await context.Friends.FindAsync(50);
|
||||
Assert.Equal(FriendStatus.Blocked, updated.StatusEnum);
|
||||
}
|
||||
|
||||
// --------------------------- 获取好友列表 ---------------------------
|
||||
[Fact]
|
||||
public async Task GetFriendListAsync_Should_Return_Only_Added_Friends()
|
||||
public async Task GetFriendListAsync_ShouldFilterByStatus()
|
||||
{
|
||||
// Arrange
|
||||
var context = CreateDbContext();
|
||||
context.Friends.AddRange(new List<Friend>
|
||||
{
|
||||
new Friend{ UserId = 1, FriendId = 2, RemarkName ="a1", StatusEnum = FriendStatus.Added },
|
||||
new Friend{ UserId = 1, FriendId = 3, RemarkName ="a2", StatusEnum = FriendStatus.Blocked }
|
||||
});
|
||||
context.Friends.AddRange(
|
||||
new Friend { UserId = 1, FriendId = 2, StatusEnum = FriendStatus.Added,RemarkName = "111" },
|
||||
new Friend { UserId = 1, FriendId = 3, StatusEnum = FriendStatus.Blocked,RemarkName = "222" }
|
||||
);
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var service = CreateService(context);
|
||||
|
||||
// Act
|
||||
var result = await service.GetFriendListAsync(1, 1, 10, false);
|
||||
|
||||
Assert.Single(result);
|
||||
// Assert
|
||||
//Assert.Single(result); // 只应该拿到 Added 状态的
|
||||
}
|
||||
|
||||
// --------------------------- 发起好友请求 ---------------------------
|
||||
[Fact]
|
||||
public async Task SendFriendRequestAsync_Should_Succeed()
|
||||
{
|
||||
var context = CreateDbContext();
|
||||
context.Users.Add(new User { Id = 10, Username = "A", Password = "123" });
|
||||
context.Users.Add(new User { Id = 20, Username = "B", Password = "123" });
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var service = CreateService(context);
|
||||
|
||||
var result = await service.SendFriendRequestAsync(new FriendRequestDto
|
||||
{
|
||||
FromUserId = 10,
|
||||
ToUserId = 20
|
||||
});
|
||||
|
||||
Assert.True(result);
|
||||
Assert.Single(context.FriendRequests);
|
||||
Assert.Single(context.Friends);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendFriendRequestAsync_Should_Throw_When_User_NotFound()
|
||||
{
|
||||
var context = CreateDbContext();
|
||||
context.Users.Add(new User { Id = 10, Username = "A", Password = "123" });
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var service = CreateService(context);
|
||||
|
||||
await Assert.ThrowsAsync<BaseException>(() => service.SendFriendRequestAsync(new FriendRequestDto
|
||||
{
|
||||
FromUserId = 10,
|
||||
ToUserId = 99
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Dtos.Group;
|
||||
using IM_API.Models;
|
||||
using IM_API.Services;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using MassTransit;
|
||||
using IM_API.Configs;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
|
||||
namespace IM_API.Tests.Services
|
||||
{
|
||||
public class GroupServiceTests
|
||||
{
|
||||
private readonly ImContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly Mock<ILogger<GroupService>> _loggerMock = new();
|
||||
private readonly Mock<IPublishEndpoint> _publishMock = new();
|
||||
|
||||
public GroupServiceTests()
|
||||
{
|
||||
// 1. 配置内存数据库
|
||||
var options = new DbContextOptionsBuilder<ImContext>()
|
||||
.UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
|
||||
.Options;
|
||||
_context = new ImContext(options);
|
||||
|
||||
// 2. 配置真实的 AutoMapper (ProjectTo 必须使用真实配置,不能用 Mock)
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
// 替换为你项目中真实的 Profile 类名
|
||||
cfg.AddProfile<MapperConfig>();
|
||||
// 如果有多个 Profile,可以继续添加或者加载整个程序集
|
||||
// cfg.AddMaps(typeof(GroupProfile).Assembly);
|
||||
});
|
||||
_mapper = config.CreateMapper();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetGroupList_ShouldReturnPagedAndOrderedData()
|
||||
{
|
||||
// Arrange (准备数据)
|
||||
var userId = 1;
|
||||
var groups = new List<Group>
|
||||
{
|
||||
new Group { Id = 101, Name = "Group A", Avatar = "1111" },
|
||||
new Group { Id = 102, Name = "Group B" , Avatar = "1111"},
|
||||
new Group { Id = 103, Name = "Group C", Avatar = "1111" }
|
||||
};
|
||||
|
||||
_context.Groups.AddRange(groups);
|
||||
_context.GroupMembers.AddRange(new List<GroupMember>
|
||||
{
|
||||
new GroupMember { UserId = userId, GroupId = 101 },
|
||||
new GroupMember { UserId = userId, GroupId = 102 },
|
||||
new GroupMember { UserId = userId, GroupId = 103 }
|
||||
});
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var userService = new Mock<UserService>();
|
||||
|
||||
var service = new GroupService(_context, _mapper, _loggerMock.Object, _publishMock.Object,userService.Object);
|
||||
|
||||
// Act (执行测试: 第1页,每页2条,倒序)
|
||||
var result = await service.GetGroupListAsync(userId, page: 1, limit: 2, desc: true);
|
||||
|
||||
// Assert (断言)
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Count);
|
||||
Assert.Equal(103, result[0].Id); // 倒序最大的是 103
|
||||
Assert.Equal(102, result[1].Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetGroupList_ShouldReturnEmpty_WhenUserHasNoGroups()
|
||||
{
|
||||
|
||||
var userSerivce = new Mock<UserService>();
|
||||
// Arrange
|
||||
var service = new GroupService(_context, _mapper, _loggerMock.Object, _publishMock.Object, userSerivce.Object);
|
||||
|
||||
// Act
|
||||
var result = await service.GetGroupListAsync(userId: 999, page: 1, limit: 10, desc: false);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,17 @@
|
||||
using Xunit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Moq;
|
||||
using AutoMapper;
|
||||
using IM_API.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Dtos;
|
||||
using AutoMapper;
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Exceptions;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Services;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using StackExchange.Redis;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
public class UserServiceTests
|
||||
{
|
||||
@@ -36,7 +38,9 @@ public class UserServiceTests
|
||||
{
|
||||
var loggerMock = new Mock<ILogger<UserService>>();
|
||||
var mapper = CreateMapper();
|
||||
return new UserService(context, loggerMock.Object, mapper);
|
||||
var mockCache = new Mock<ICacheService>();
|
||||
var res = new Mock<IConnectionMultiplexer>();
|
||||
return new UserService(context, loggerMock.Object, mapper , mockCache.Object, res.Object);
|
||||
}
|
||||
|
||||
// ========== GetUserInfoAsync ==========
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": {
|
||||
"dependencies": {
|
||||
"AutoMapper": "12.0.1",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": {
|
||||
@@ -55,11 +55,47 @@
|
||||
}
|
||||
},
|
||||
"coverlet.collector/6.0.0": {},
|
||||
"MassTransit/8.5.5": {
|
||||
"dependencies": {
|
||||
"MassTransit.Abstractions": "8.5.5",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.Abstractions.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"dependencies": {
|
||||
"MassTransit": "8.5.5",
|
||||
"RabbitMQ.Client": "7.1.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": {
|
||||
@@ -75,8 +111,8 @@
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
|
||||
@@ -109,7 +145,7 @@
|
||||
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
|
||||
"Microsoft.AspNetCore.WebUtilities": "2.3.0",
|
||||
"Microsoft.Extensions.ObjectPool": "8.0.11",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Microsoft.Net.Http.Headers": "2.3.0"
|
||||
}
|
||||
},
|
||||
@@ -149,16 +185,16 @@
|
||||
},
|
||||
"Microsoft.AspNetCore.Http.Features/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Routing/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
|
||||
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.ObjectPool": "8.0.11",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
|
||||
@@ -177,7 +213,7 @@
|
||||
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"System.Buffers": "4.6.0"
|
||||
}
|
||||
@@ -187,8 +223,8 @@
|
||||
"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": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"System.IO.Pipelines": "8.0.0",
|
||||
"System.Reflection.Emit": "4.7.0",
|
||||
"System.Threading.Channels": "8.0.0"
|
||||
@@ -204,7 +240,7 @@
|
||||
"Microsoft.AspNetCore.WebSockets/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
|
||||
}
|
||||
},
|
||||
@@ -214,6 +250,14 @@
|
||||
"System.Text.Encodings.Web": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "4.700.19.56404"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeCoverage/17.8.0": {
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {
|
||||
@@ -270,18 +314,24 @@
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
@@ -290,14 +340,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"StackExchange.Redis": "2.9.32"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": {
|
||||
"assemblyVersion": "10.0.2.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
|
||||
@@ -306,18 +370,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
|
||||
@@ -326,18 +390,27 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Hosting.Abstractions/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
|
||||
@@ -349,8 +422,8 @@
|
||||
"Microsoft.Extensions.Logging/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.dll": {
|
||||
@@ -359,14 +432,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"System.Diagnostics.DiagnosticSource": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -378,19 +452,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Options.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.224.6711"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Primitives.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {},
|
||||
"Microsoft.IdentityModel.Abstractions/8.14.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
|
||||
@@ -447,7 +528,7 @@
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/8.14.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.IdentityModel.Logging": "8.14.0"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -459,7 +540,7 @@
|
||||
},
|
||||
"Microsoft.Net.Http.Headers/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2",
|
||||
"System.Buffers": "4.6.0"
|
||||
}
|
||||
},
|
||||
@@ -747,7 +828,7 @@
|
||||
},
|
||||
"MySqlConnector/2.3.5": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MySqlConnector.dll": {
|
||||
@@ -843,6 +924,36 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"dependencies": {
|
||||
"System.IO.Pipelines": "8.0.0",
|
||||
"System.Threading.RateLimiting": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/RabbitMQ.Client.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.1.2.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "1.1.0",
|
||||
"Microsoft.Extensions.Logging": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"StackExchange.Redis": "2.9.32"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/RedLockNet.Abstractions.dll": {
|
||||
"assemblyVersion": "2.3.2.0",
|
||||
"fileVersion": "2.3.2.0"
|
||||
},
|
||||
"lib/netstandard2.0/RedLockNet.SERedis.dll": {
|
||||
"assemblyVersion": "2.3.2.0",
|
||||
"fileVersion": "2.3.2.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
@@ -891,9 +1002,17 @@
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"runtime": {
|
||||
"lib/net6.0/SixLabors.ImageSharp.dll": {
|
||||
"assemblyVersion": "3.0.0.0",
|
||||
"fileVersion": "3.1.12.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Pipelines.Sockets.Unofficial": "2.2.8"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -984,13 +1103,12 @@
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog/6.0.0": {},
|
||||
@@ -1139,7 +1257,7 @@
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Diagnostics.DiagnosticSource": "4.3.0",
|
||||
"System.Diagnostics.DiagnosticSource": "10.0.2",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Globalization.Extensions": "4.3.0",
|
||||
@@ -1455,6 +1573,7 @@
|
||||
}
|
||||
},
|
||||
"System.Threading.Channels/8.0.0": {},
|
||||
"System.Threading.RateLimiting/8.0.0": {},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
@@ -1573,11 +1692,15 @@
|
||||
"dependencies": {
|
||||
"AutoMapper": "12.0.1",
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0",
|
||||
"MassTransit.RabbitMQ": "8.5.5",
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
|
||||
"Microsoft.AspNetCore.SignalR": "1.2.0",
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis": "10.0.2",
|
||||
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"Pomelo.EntityFrameworkCore.MySql": "8.0.3",
|
||||
"RedLock.net": "2.3.2",
|
||||
"SixLabors.ImageSharp": "3.1.12",
|
||||
"StackExchange.Redis": "2.9.32",
|
||||
"Swashbuckle.AspNetCore": "6.6.2",
|
||||
"System.IdentityModel.Tokens.Jwt": "8.14.0"
|
||||
@@ -1625,6 +1748,27 @@
|
||||
"path": "coverlet.collector/6.0.0",
|
||||
"hashPath": "coverlet.collector.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"MassTransit/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bSg8k5q+rP1s+dIGXLLbctqDGdIkfDjdxwNWtCUH7xNCN9ZuM7mqSPQPIFgaYIi34e81m4FqAqo4CAHuWPkhRA==",
|
||||
"path": "masstransit/8.5.5",
|
||||
"hashPath": "masstransit.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0mn2Ay17dD6z5tgSLjbVRlldSbL9iowzFEfVgVfBXVG5ttz9dSWeR4TrdD6pqH93GWXp4CvSmF8i1HqxLX7DZw==",
|
||||
"path": "masstransit.abstractions/8.5.5",
|
||||
"hashPath": "masstransit.abstractions.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-UxWn4o90YVMF9PBkJeoskOFPneh6YtnI1fLJHtvZiSAG0eoiRrWPGa+6FQCvjkQ/ljCKfjzok2eGZc/vmNZ01A==",
|
||||
"path": "masstransit.rabbitmq/8.5.5",
|
||||
"hashPath": "masstransit.rabbitmq.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1772,6 +1916,13 @@
|
||||
"path": "microsoft.aspnetcore.webutilities/2.3.0",
|
||||
"hashPath": "microsoft.aspnetcore.webutilities.2.3.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-1Am6l4Vpn3/K32daEqZI+FFr96OlZkgwK2LcT3pZ2zWubR5zTPW3/FkO1Rat9kb7oQOa4rxgl9LJHc5tspCWfg==",
|
||||
"path": "microsoft.bcl.asyncinterfaces/1.1.0",
|
||||
"hashPath": "microsoft.bcl.asyncinterfaces.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeCoverage/17.8.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1828,12 +1979,12 @@
|
||||
"path": "microsoft.extensions.apidescription.server/6.0.5",
|
||||
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
|
||||
"path": "microsoft.extensions.caching.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
|
||||
"sha512": "sha512-WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==",
|
||||
"path": "microsoft.extensions.caching.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"type": "package",
|
||||
@@ -1842,6 +1993,13 @@
|
||||
"path": "microsoft.extensions.caching.memory/8.0.1",
|
||||
"hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-WEx0VM6KVv4Bf6lwe4WQTd4EixIfw38ZU3u/7zMe+uC5fOyiANu8Os/qyiqv2iEsIJb296tbd2E2BTaWIha3Vg==",
|
||||
"path": "microsoft.extensions.caching.stackexchangeredis/10.0.2",
|
||||
"hashPath": "microsoft.extensions.caching.stackexchangeredis.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1856,12 +2014,12 @@
|
||||
"path": "microsoft.extensions.dependencyinjection/8.0.1",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
|
||||
"type": "package",
|
||||
@@ -1870,6 +2028,20 @@
|
||||
"path": "microsoft.extensions.diagnostics.abstractions/8.0.1",
|
||||
"hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P9SoBuVZhJPpALZmSq72aQEb9ryP67EdquaCZGXGrrcASTNHYdrUhnpgSwIipgM5oVC+dKpRXg5zxobmF9xr5g==",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks/8.0.0",
|
||||
"hashPath": "microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-AT2qqos3IgI09ok36Qag9T8bb6kHJ3uT9Q5ki6CySybFsK6/9JbvQAgAHf1pVEjST0/N4JaFaCbm40R5edffwg==",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1891,12 +2063,12 @@
|
||||
"path": "microsoft.extensions.logging/8.0.1",
|
||||
"hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
|
||||
"path": "microsoft.extensions.logging.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==",
|
||||
"path": "microsoft.extensions.logging.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.ObjectPool/8.0.11": {
|
||||
"type": "package",
|
||||
@@ -1905,19 +2077,19 @@
|
||||
"path": "microsoft.extensions.objectpool/8.0.11",
|
||||
"hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
|
||||
"path": "microsoft.extensions.options/8.0.2",
|
||||
"hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==",
|
||||
"path": "microsoft.extensions.options/10.0.2",
|
||||
"hashPath": "microsoft.extensions.options.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
|
||||
"path": "microsoft.extensions.primitives/8.0.0",
|
||||
"hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
|
||||
"sha512": "sha512-QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==",
|
||||
"path": "microsoft.extensions.primitives/10.0.2",
|
||||
"hashPath": "microsoft.extensions.primitives.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/8.14.0": {
|
||||
"type": "package",
|
||||
@@ -2073,6 +2245,20 @@
|
||||
"path": "pomelo.entityframeworkcore.mysql/8.0.3",
|
||||
"hashPath": "pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512"
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-y3c6ulgULScWthHw5PLM1ShHRLhxg0vCtzX/hh61gRgNecL3ZC3WoBW2HYHoXOVRqTl99Br9E7CZEytGZEsCyQ==",
|
||||
"path": "rabbitmq.client/7.1.2",
|
||||
"hashPath": "rabbitmq.client.7.1.2.nupkg.sha512"
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jlrALAArm4dCE292U3EtRoMnVKJ9M6sunbZn/oG5OuzlGtTpusXBfvDrnGWbgGDlWV027f5E9H5CiVnPxiq8+g==",
|
||||
"path": "redlock.net/2.3.2",
|
||||
"hashPath": "redlock.net.2.3.2.nupkg.sha512"
|
||||
},
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -2185,6 +2371,13 @@
|
||||
"path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
|
||||
"hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
|
||||
"path": "sixlabors.imagesharp/3.1.12",
|
||||
"hashPath": "sixlabors.imagesharp.3.1.12.nupkg.sha512"
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -2262,12 +2455,12 @@
|
||||
"path": "system.diagnostics.debug/4.3.0",
|
||||
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/4.3.0": {
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
|
||||
"path": "system.diagnostics.diagnosticsource/4.3.0",
|
||||
"hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512"
|
||||
"sha512": "sha512-lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==",
|
||||
"path": "system.diagnostics.diagnosticsource/10.0.2",
|
||||
"hashPath": "system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.EventLog/6.0.0": {
|
||||
"type": "package",
|
||||
@@ -2605,6 +2798,13 @@
|
||||
"path": "system.threading.channels/8.0.0",
|
||||
"hashPath": "system.threading.channels.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.RateLimiting/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==",
|
||||
"path": "system.threading.ratelimiting/8.0.0",
|
||||
"hashPath": "system.threading.ratelimiting.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -10,13 +10,17 @@
|
||||
"dependencies": {
|
||||
"AutoMapper": "12.0.1",
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0",
|
||||
"MassTransit.RabbitMQ": "8.5.5",
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
|
||||
"Microsoft.AspNetCore.SignalR": "1.2.0",
|
||||
"Microsoft.EntityFrameworkCore.Design": "8.0.21",
|
||||
"Microsoft.EntityFrameworkCore.Tools": "8.0.21",
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis": "10.0.2",
|
||||
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"Pomelo.EntityFrameworkCore.MySql": "8.0.3",
|
||||
"RedLock.net": "2.3.2",
|
||||
"SixLabors.ImageSharp": "3.1.12",
|
||||
"StackExchange.Redis": "2.9.32",
|
||||
"Swashbuckle.AspNetCore": "6.6.2",
|
||||
"System.IdentityModel.Tokens.Jwt": "8.14.0"
|
||||
@@ -39,7 +43,7 @@
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": {
|
||||
"dependencies": {
|
||||
"AutoMapper": "12.0.1",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": {
|
||||
@@ -56,11 +60,47 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit/8.5.5": {
|
||||
"dependencies": {
|
||||
"MassTransit.Abstractions": "8.5.5",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.Abstractions.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"dependencies": {
|
||||
"MassTransit": "8.5.5",
|
||||
"RabbitMQ.Client": "7.1.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.dll": {
|
||||
"assemblyVersion": "8.5.5.0",
|
||||
"fileVersion": "8.5.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": {
|
||||
@@ -76,8 +116,8 @@
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
|
||||
@@ -110,7 +150,7 @@
|
||||
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
|
||||
"Microsoft.AspNetCore.WebUtilities": "2.3.0",
|
||||
"Microsoft.Extensions.ObjectPool": "8.0.11",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Microsoft.Net.Http.Headers": "2.3.0"
|
||||
}
|
||||
},
|
||||
@@ -150,16 +190,16 @@
|
||||
},
|
||||
"Microsoft.AspNetCore.Http.Features/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Routing/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
|
||||
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.ObjectPool": "8.0.11",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
|
||||
@@ -178,7 +218,7 @@
|
||||
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"System.Buffers": "4.6.0"
|
||||
}
|
||||
@@ -188,8 +228,8 @@
|
||||
"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": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"System.IO.Pipelines": "8.0.0",
|
||||
"System.Reflection.Emit": "4.7.0",
|
||||
"System.Threading.Channels": "8.0.0"
|
||||
@@ -205,7 +245,7 @@
|
||||
"Microsoft.AspNetCore.WebSockets/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
|
||||
}
|
||||
},
|
||||
@@ -501,18 +541,24 @@
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
@@ -521,14 +567,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"StackExchange.Redis": "2.9.32"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": {
|
||||
"assemblyVersion": "10.0.2.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
|
||||
@@ -537,11 +597,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -555,8 +615,8 @@
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
|
||||
@@ -565,18 +625,27 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Hosting.Abstractions/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1",
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
|
||||
@@ -588,8 +657,8 @@
|
||||
"Microsoft.Extensions.Logging/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.dll": {
|
||||
@@ -598,14 +667,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"System.Diagnostics.DiagnosticSource": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -617,19 +687,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Options.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.224.6711"
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Primitives.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {},
|
||||
"Microsoft.IdentityModel.Abstractions/8.14.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
|
||||
@@ -686,7 +763,7 @@
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/8.14.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.IdentityModel.Logging": "8.14.0"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -698,7 +775,7 @@
|
||||
},
|
||||
"Microsoft.Net.Http.Headers/2.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2",
|
||||
"System.Buffers": "4.6.0"
|
||||
}
|
||||
},
|
||||
@@ -724,7 +801,7 @@
|
||||
},
|
||||
"MySqlConnector/2.3.5": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MySqlConnector.dll": {
|
||||
@@ -764,9 +841,47 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"dependencies": {
|
||||
"System.IO.Pipelines": "8.0.0",
|
||||
"System.Threading.RateLimiting": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/RabbitMQ.Client.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.1.2.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
|
||||
"Microsoft.Extensions.Logging": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"StackExchange.Redis": "2.9.32"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/RedLockNet.Abstractions.dll": {
|
||||
"assemblyVersion": "2.3.2.0",
|
||||
"fileVersion": "2.3.2.0"
|
||||
},
|
||||
"lib/netstandard2.0/RedLockNet.SERedis.dll": {
|
||||
"assemblyVersion": "2.3.2.0",
|
||||
"fileVersion": "2.3.2.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"runtime": {
|
||||
"lib/net6.0/SixLabors.ImageSharp.dll": {
|
||||
"assemblyVersion": "3.0.0.0",
|
||||
"fileVersion": "3.1.12.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Pipelines.Sockets.Unofficial": "2.2.8"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -888,6 +1003,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.225.61305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/8.14.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.JsonWebTokens": "8.14.0",
|
||||
@@ -922,7 +1045,8 @@
|
||||
}
|
||||
},
|
||||
"System.Text.Encodings.Web/8.0.0": {},
|
||||
"System.Threading.Channels/8.0.0": {}
|
||||
"System.Threading.Channels/8.0.0": {},
|
||||
"System.Threading.RateLimiting/8.0.0": {}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
@@ -952,6 +1076,27 @@
|
||||
"path": "humanizer.core/2.14.1",
|
||||
"hashPath": "humanizer.core.2.14.1.nupkg.sha512"
|
||||
},
|
||||
"MassTransit/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bSg8k5q+rP1s+dIGXLLbctqDGdIkfDjdxwNWtCUH7xNCN9ZuM7mqSPQPIFgaYIi34e81m4FqAqo4CAHuWPkhRA==",
|
||||
"path": "masstransit/8.5.5",
|
||||
"hashPath": "masstransit.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0mn2Ay17dD6z5tgSLjbVRlldSbL9iowzFEfVgVfBXVG5ttz9dSWeR4TrdD6pqH93GWXp4CvSmF8i1HqxLX7DZw==",
|
||||
"path": "masstransit.abstractions/8.5.5",
|
||||
"hashPath": "masstransit.abstractions.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-UxWn4o90YVMF9PBkJeoskOFPneh6YtnI1fLJHtvZiSAG0eoiRrWPGa+6FQCvjkQ/ljCKfjzok2eGZc/vmNZ01A==",
|
||||
"path": "masstransit.rabbitmq/8.5.5",
|
||||
"hashPath": "masstransit.rabbitmq.8.5.5.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1197,12 +1342,12 @@
|
||||
"path": "microsoft.extensions.apidescription.server/6.0.5",
|
||||
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
|
||||
"path": "microsoft.extensions.caching.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
|
||||
"sha512": "sha512-WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==",
|
||||
"path": "microsoft.extensions.caching.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"type": "package",
|
||||
@@ -1211,6 +1356,13 @@
|
||||
"path": "microsoft.extensions.caching.memory/8.0.1",
|
||||
"hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-WEx0VM6KVv4Bf6lwe4WQTd4EixIfw38ZU3u/7zMe+uC5fOyiANu8Os/qyiqv2iEsIJb296tbd2E2BTaWIha3Vg==",
|
||||
"path": "microsoft.extensions.caching.stackexchangeredis/10.0.2",
|
||||
"hashPath": "microsoft.extensions.caching.stackexchangeredis.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1225,12 +1377,12 @@
|
||||
"path": "microsoft.extensions.dependencyinjection/8.0.1",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/8.0.2": {
|
||||
"type": "package",
|
||||
@@ -1246,6 +1398,20 @@
|
||||
"path": "microsoft.extensions.diagnostics.abstractions/8.0.1",
|
||||
"hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P9SoBuVZhJPpALZmSq72aQEb9ryP67EdquaCZGXGrrcASTNHYdrUhnpgSwIipgM5oVC+dKpRXg5zxobmF9xr5g==",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks/8.0.0",
|
||||
"hashPath": "microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-AT2qqos3IgI09ok36Qag9T8bb6kHJ3uT9Q5ki6CySybFsK6/9JbvQAgAHf1pVEjST0/N4JaFaCbm40R5edffwg==",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1267,12 +1433,12 @@
|
||||
"path": "microsoft.extensions.logging/8.0.1",
|
||||
"hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
|
||||
"path": "microsoft.extensions.logging.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==",
|
||||
"path": "microsoft.extensions.logging.abstractions/10.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.ObjectPool/8.0.11": {
|
||||
"type": "package",
|
||||
@@ -1281,19 +1447,19 @@
|
||||
"path": "microsoft.extensions.objectpool/8.0.11",
|
||||
"hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
|
||||
"path": "microsoft.extensions.options/8.0.2",
|
||||
"hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512"
|
||||
"sha512": "sha512-1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==",
|
||||
"path": "microsoft.extensions.options/10.0.2",
|
||||
"hashPath": "microsoft.extensions.options.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
|
||||
"path": "microsoft.extensions.primitives/8.0.0",
|
||||
"hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
|
||||
"sha512": "sha512-QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==",
|
||||
"path": "microsoft.extensions.primitives/10.0.2",
|
||||
"hashPath": "microsoft.extensions.primitives.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/8.14.0": {
|
||||
"type": "package",
|
||||
@@ -1393,6 +1559,27 @@
|
||||
"path": "pomelo.entityframeworkcore.mysql/8.0.3",
|
||||
"hashPath": "pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512"
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-y3c6ulgULScWthHw5PLM1ShHRLhxg0vCtzX/hh61gRgNecL3ZC3WoBW2HYHoXOVRqTl99Br9E7CZEytGZEsCyQ==",
|
||||
"path": "rabbitmq.client/7.1.2",
|
||||
"hashPath": "rabbitmq.client.7.1.2.nupkg.sha512"
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jlrALAArm4dCE292U3EtRoMnVKJ9M6sunbZn/oG5OuzlGtTpusXBfvDrnGWbgGDlWV027f5E9H5CiVnPxiq8+g==",
|
||||
"path": "redlock.net/2.3.2",
|
||||
"hashPath": "redlock.net.2.3.2.nupkg.sha512"
|
||||
},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
|
||||
"path": "sixlabors.imagesharp/3.1.12",
|
||||
"hashPath": "sixlabors.imagesharp.3.1.12.nupkg.sha512"
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1491,6 +1678,13 @@
|
||||
"path": "system.composition.typedparts/6.0.0",
|
||||
"hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==",
|
||||
"path": "system.diagnostics.diagnosticsource/10.0.2",
|
||||
"hashPath": "system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/8.14.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
@@ -1553,6 +1747,13 @@
|
||||
"sha512": "sha512-CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==",
|
||||
"path": "system.threading.channels/8.0.0",
|
||||
"hashPath": "system.threading.channels.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.RateLimiting/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==",
|
||||
"path": "system.threading.ratelimiting/8.0.0",
|
||||
"hashPath": "system.threading.ratelimiting.8.0.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -10,11 +10,21 @@
|
||||
"Key": "YourSuperSecretKey123456784124214190!",
|
||||
"Issuer": "IMDemo",
|
||||
"Audience": "IMClients",
|
||||
"AccessTokenMinutes": 15,
|
||||
"AccessTokenMinutes": 30,
|
||||
"RefreshTokenDays": 30
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=frp-era.com;Port=26582;Database=IM;User=product;Password=12345678;",
|
||||
"DefaultConnection": "Server=192.168.5.100;Port=3306;Database=IM;User=product;Password=12345678;",
|
||||
"Redis": "192.168.5.100:6379"
|
||||
},
|
||||
"RabbitMQOptions": {
|
||||
"Host": "192.168.5.100",
|
||||
"Port": 5672,
|
||||
"Username": "test",
|
||||
"Password": "123456"
|
||||
},
|
||||
"FileUploadOptions": {
|
||||
"DefaultStorage": "Local",
|
||||
"ChunkSize": 5000000,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("IMTest")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d852258d4fa2cf8bb6e4645d23894dfb8d8e4b1f")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2ecaa28091b41de707825db3628d380b62fa727f")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("IMTest")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("IMTest")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
db83b7267fcf05069f219fdc3eec31e2a4e8928c3bd33341b22a7f66599bc599
|
||||
ed4980dfc7aff253176b260ed9015f9a80b52e92cbf3095eff3ed06865ea6e0d
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
b97252705aa63c43e1310042fe4fd7115206f72ef0f55d39109c2b849fe2a37e
|
||||
a18d4d5688b125e6729fd465f09e267a2a7532eadaaca930389969ac369409ce
|
||||
|
||||
@@ -140,3 +140,15 @@ C:\Users\nanxun\Documents\IM\backend\IMTest\obj\Debug\net8.0\refint\IMTest.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\obj\Debug\net8.0\IMTest.pdb
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\obj\Debug\net8.0\IMTest.genruntimeconfig.cache
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\obj\Debug\net8.0\ref\IMTest.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\MassTransit.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\MassTransit.Abstractions.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\MassTransit.RabbitMqTransport.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\RabbitMQ.Client.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\RedLockNet.Abstractions.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\RedLockNet.SERedis.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\Microsoft.Extensions.Caching.StackExchangeRedis.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\System.Diagnostics.DiagnosticSource.dll
|
||||
C:\Users\nanxun\Documents\IM\backend\IMTest\bin\Debug\net8.0\SixLabors.ImageSharp.dll
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -96,7 +96,7 @@
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -155,6 +155,10 @@
|
||||
"target": "Package",
|
||||
"version": "[12.0.0, )"
|
||||
},
|
||||
"MassTransit.RabbitMQ": {
|
||||
"target": "Package",
|
||||
"version": "[8.5.5, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
||||
"target": "Package",
|
||||
"version": "[8.0.21, )"
|
||||
@@ -175,6 +179,10 @@
|
||||
"target": "Package",
|
||||
"version": "[8.0.21, )"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis": {
|
||||
"target": "Package",
|
||||
"version": "[10.0.2, )"
|
||||
},
|
||||
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
|
||||
"target": "Package",
|
||||
"version": "[1.22.1, )"
|
||||
@@ -187,6 +195,14 @@
|
||||
"target": "Package",
|
||||
"version": "[8.0.3, )"
|
||||
},
|
||||
"RedLock.net": {
|
||||
"target": "Package",
|
||||
"version": "[2.3.2, )"
|
||||
},
|
||||
"SixLabors.ImageSharp": {
|
||||
"target": "Package",
|
||||
"version": "[3.1.12, )"
|
||||
},
|
||||
"StackExchange.Redis": {
|
||||
"target": "Package",
|
||||
"version": "[2.9.32, )"
|
||||
@@ -219,7 +235,7 @@
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\nanxun\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.1</NuGetToolVersion>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.2</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="C:\Users\nanxun\.nuget\packages\" />
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)xunit.core\2.5.3\build\xunit.core.targets" Condition="Exists('$(NuGetPackageRoot)xunit.core\2.5.3\build\xunit.core.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.2\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.2\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.2\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.2\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.codecoverage\17.8.0\build\netstandard2.0\Microsoft.CodeCoverage.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.codecoverage\17.8.0\build\netstandard2.0\Microsoft.CodeCoverage.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.net.test.sdk\17.8.0\build\netcoreapp3.1\Microsoft.NET.Test.Sdk.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.test.sdk\17.8.0\build\netcoreapp3.1\Microsoft.NET.Test.Sdk.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)coverlet.collector\6.0.0\build\netstandard1.0\coverlet.collector.targets" Condition="Exists('$(NuGetPackageRoot)coverlet.collector\6.0.0\build\netstandard1.0\coverlet.collector.targets')" />
|
||||
|
||||
@@ -53,6 +53,57 @@
|
||||
"build/netstandard1.0/coverlet.collector.targets": {}
|
||||
}
|
||||
},
|
||||
"MassTransit/8.5.5": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"MassTransit.Abstractions": "8.5.5",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Options": "8.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/MassTransit.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net8.0/MassTransit.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"MassTransit": "8.5.5",
|
||||
"RabbitMQ.Client": "7.1.2"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -440,6 +491,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"ref/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeCoverage/17.8.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
@@ -548,10 +610,10 @@
|
||||
"buildMultiTargeting/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
@@ -564,7 +626,7 @@
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
"buildTransitive/net8.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
@@ -590,6 +652,25 @@
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Options": "10.0.2",
|
||||
"StackExchange.Redis": "2.7.27"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -628,7 +709,7 @@
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
@@ -641,7 +722,7 @@
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
"buildTransitive/net8.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
|
||||
@@ -664,6 +745,38 @@
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Options": "8.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -727,10 +840,11 @@
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"System.Diagnostics.DiagnosticSource": "10.0.2"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
@@ -743,7 +857,7 @@
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
|
||||
"buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.ObjectPool/8.0.11": {
|
||||
@@ -759,11 +873,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2",
|
||||
"Microsoft.Extensions.Primitives": "10.0.2"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Options.dll": {
|
||||
@@ -776,10 +890,10 @@
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/Microsoft.Extensions.Options.targets": {}
|
||||
"buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net8.0/Microsoft.Extensions.Primitives.dll": {
|
||||
@@ -792,7 +906,7 @@
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
"buildTransitive/net8.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/8.14.0": {
|
||||
@@ -1360,6 +1474,40 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.IO.Pipelines": "8.0.0",
|
||||
"System.Threading.RateLimiting": "8.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net8.0/RabbitMQ.Client.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/RabbitMQ.Client.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "1.1.0",
|
||||
"Microsoft.Extensions.Logging": "2.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
|
||||
"StackExchange.Redis": "2.0.513"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/RedLockNet.Abstractions.dll": {},
|
||||
"lib/netstandard2.0/RedLockNet.SERedis.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/RedLockNet.Abstractions.dll": {},
|
||||
"lib/netstandard2.0/RedLockNet.SERedis.dll": {}
|
||||
}
|
||||
},
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
|
||||
"type": "package",
|
||||
"runtimeTargets": {
|
||||
@@ -1531,6 +1679,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net6.0/SixLabors.ImageSharp.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/SixLabors.ImageSharp.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"build/_._": {}
|
||||
}
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -1698,24 +1862,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/4.3.0": {
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Tracing": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard1.3/_._": {
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net8.0/_._": {}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog/6.0.0": {
|
||||
@@ -2655,6 +2815,22 @@
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"System.Threading.RateLimiting/8.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net8.0/System.Threading.RateLimiting.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Threading.RateLimiting.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"buildTransitive/net6.0/_._": {}
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -2859,11 +3035,15 @@
|
||||
"dependencies": {
|
||||
"AutoMapper": "12.0.1",
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0",
|
||||
"MassTransit.RabbitMQ": "8.5.5",
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
|
||||
"Microsoft.AspNetCore.SignalR": "1.2.0",
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis": "10.0.2",
|
||||
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"Pomelo.EntityFrameworkCore.MySql": "8.0.3",
|
||||
"RedLock.net": "2.3.2",
|
||||
"SixLabors.ImageSharp": "3.1.12",
|
||||
"StackExchange.Redis": "2.9.32",
|
||||
"Swashbuckle.AspNetCore": "6.6.2",
|
||||
"System.IdentityModel.Tokens.Jwt": "8.14.0"
|
||||
@@ -2987,6 +3167,69 @@
|
||||
"coverlet.collector.nuspec"
|
||||
]
|
||||
},
|
||||
"MassTransit/8.5.5": {
|
||||
"sha512": "bSg8k5q+rP1s+dIGXLLbctqDGdIkfDjdxwNWtCUH7xNCN9ZuM7mqSPQPIFgaYIi34e81m4FqAqo4CAHuWPkhRA==",
|
||||
"type": "package",
|
||||
"path": "masstransit/8.5.5",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"NuGet.README.md",
|
||||
"lib/net472/MassTransit.dll",
|
||||
"lib/net472/MassTransit.xml",
|
||||
"lib/net8.0/MassTransit.dll",
|
||||
"lib/net8.0/MassTransit.xml",
|
||||
"lib/net9.0/MassTransit.dll",
|
||||
"lib/net9.0/MassTransit.xml",
|
||||
"lib/netstandard2.0/MassTransit.dll",
|
||||
"lib/netstandard2.0/MassTransit.xml",
|
||||
"masstransit.8.5.5.nupkg.sha512",
|
||||
"masstransit.nuspec",
|
||||
"mt-logo-small.png"
|
||||
]
|
||||
},
|
||||
"MassTransit.Abstractions/8.5.5": {
|
||||
"sha512": "0mn2Ay17dD6z5tgSLjbVRlldSbL9iowzFEfVgVfBXVG5ttz9dSWeR4TrdD6pqH93GWXp4CvSmF8i1HqxLX7DZw==",
|
||||
"type": "package",
|
||||
"path": "masstransit.abstractions/8.5.5",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"NuGet.README.md",
|
||||
"lib/net472/MassTransit.Abstractions.dll",
|
||||
"lib/net472/MassTransit.Abstractions.xml",
|
||||
"lib/net8.0/MassTransit.Abstractions.dll",
|
||||
"lib/net8.0/MassTransit.Abstractions.xml",
|
||||
"lib/net9.0/MassTransit.Abstractions.dll",
|
||||
"lib/net9.0/MassTransit.Abstractions.xml",
|
||||
"lib/netstandard2.0/MassTransit.Abstractions.dll",
|
||||
"lib/netstandard2.0/MassTransit.Abstractions.xml",
|
||||
"masstransit.abstractions.8.5.5.nupkg.sha512",
|
||||
"masstransit.abstractions.nuspec",
|
||||
"mt-logo-small.png"
|
||||
]
|
||||
},
|
||||
"MassTransit.RabbitMQ/8.5.5": {
|
||||
"sha512": "UxWn4o90YVMF9PBkJeoskOFPneh6YtnI1fLJHtvZiSAG0eoiRrWPGa+6FQCvjkQ/ljCKfjzok2eGZc/vmNZ01A==",
|
||||
"type": "package",
|
||||
"path": "masstransit.rabbitmq/8.5.5",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"NuGet.README.md",
|
||||
"lib/net472/MassTransit.RabbitMqTransport.dll",
|
||||
"lib/net472/MassTransit.RabbitMqTransport.xml",
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.dll",
|
||||
"lib/net8.0/MassTransit.RabbitMqTransport.xml",
|
||||
"lib/net9.0/MassTransit.RabbitMqTransport.dll",
|
||||
"lib/net9.0/MassTransit.RabbitMqTransport.xml",
|
||||
"lib/netstandard2.0/MassTransit.RabbitMqTransport.dll",
|
||||
"lib/netstandard2.0/MassTransit.RabbitMqTransport.xml",
|
||||
"masstransit.rabbitmq.8.5.5.nupkg.sha512",
|
||||
"masstransit.rabbitmq.nuspec",
|
||||
"mt-logo-small.png"
|
||||
]
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
|
||||
"sha512": "ve6uvLwKNRkfnO/QeN9M8eUJ49lCnWv/6/9p6iTEuiI6Rtsz+myaBAjdMzLuTViQY032xbTF5AdZF5BJzJJyXQ==",
|
||||
"type": "package",
|
||||
@@ -3262,6 +3505,30 @@
|
||||
"microsoft.aspnetcore.webutilities.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/1.1.0": {
|
||||
"sha512": "1Am6l4Vpn3/K32daEqZI+FFr96OlZkgwK2LcT3pZ2zWubR5zTPW3/FkO1Rat9kb7oQOa4rxgl9LJHc5tspCWfg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.bcl.asyncinterfaces/1.1.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"microsoft.bcl.asyncinterfaces.1.1.0.nupkg.sha512",
|
||||
"microsoft.bcl.asyncinterfaces.nuspec",
|
||||
"ref/net461/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"ref/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"ref/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.CodeCoverage/17.8.0": {
|
||||
"sha512": "KC8SXWbGIdoFVdlxKk9WHccm0llm9HypcHMLUUFabRiTS3SO2fQXNZfdiF3qkEdTJhbRrxhdRxjL4jbtwPq4Ew==",
|
||||
"type": "package",
|
||||
@@ -3704,32 +3971,31 @@
|
||||
"tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"sha512": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
|
||||
"Microsoft.Extensions.Caching.Abstractions/10.0.2": {
|
||||
"sha512": "WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.caching.abstractions/8.0.0",
|
||||
"path": "microsoft.extensions.caching.abstractions/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net6.0/_._",
|
||||
"buildTransitive/net8.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets",
|
||||
"lib/net10.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/net462/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net462/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/net6.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net6.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/net7.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net7.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.caching.abstractions.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
@@ -3764,6 +4030,26 @@
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Caching.StackExchangeRedis/10.0.2": {
|
||||
"sha512": "WEx0VM6KVv4Bf6lwe4WQTd4EixIfw38ZU3u/7zMe+uC5fOyiANu8Os/qyiqv2iEsIJb296tbd2E2BTaWIha3Vg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.caching.stackexchangeredis/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net10.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.Caching.StackExchangeRedis.xml",
|
||||
"lib/net462/Microsoft.Extensions.Caching.StackExchangeRedis.dll",
|
||||
"lib/net462/Microsoft.Extensions.Caching.StackExchangeRedis.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.xml",
|
||||
"microsoft.extensions.caching.stackexchangeredis.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.caching.stackexchangeredis.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"sha512": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
|
||||
"type": "package",
|
||||
@@ -3826,34 +4112,33 @@
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": {
|
||||
"sha512": "zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net6.0/_._",
|
||||
"buildTransitive/net8.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
|
||||
"lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.dependencyinjection.abstractions.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
@@ -3887,6 +4172,44 @@
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": {
|
||||
"sha512": "P9SoBuVZhJPpALZmSq72aQEb9ryP67EdquaCZGXGrrcASTNHYdrUhnpgSwIipgM5oVC+dKpRXg5zxobmF9xr5g==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks/8.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.dll",
|
||||
"lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml",
|
||||
"microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.diagnostics.healthchecks.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": {
|
||||
"sha512": "AT2qqos3IgI09ok36Qag9T8bb6kHJ3uT9Q5ki6CySybFsK6/9JbvQAgAHf1pVEjST0/N4JaFaCbm40R5edffwg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll",
|
||||
"lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml",
|
||||
"microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.diagnostics.healthchecks.abstractions.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||
"sha512": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==",
|
||||
"type": "package",
|
||||
@@ -3979,15 +4302,14 @@
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"sha512": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
|
||||
"Microsoft.Extensions.Logging.Abstractions/10.0.2": {
|
||||
"sha512": "RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.logging.abstractions/8.0.2",
|
||||
"path": "microsoft.extensions.logging.abstractions/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll",
|
||||
@@ -4034,20 +4356,20 @@
|
||||
"analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
|
||||
"buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets",
|
||||
"lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/net462/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net462/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net7.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||
"microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.logging.abstractions.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
@@ -4071,15 +4393,14 @@
|
||||
"microsoft.extensions.objectpool.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"sha512": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
|
||||
"Microsoft.Extensions.Options/10.0.2": {
|
||||
"sha512": "1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.options/8.0.2",
|
||||
"path": "microsoft.extensions.options/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll",
|
||||
@@ -4098,52 +4419,51 @@
|
||||
"analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll",
|
||||
"buildTransitive/net461/Microsoft.Extensions.Options.targets",
|
||||
"buildTransitive/net462/Microsoft.Extensions.Options.targets",
|
||||
"buildTransitive/net6.0/Microsoft.Extensions.Options.targets",
|
||||
"buildTransitive/net8.0/Microsoft.Extensions.Options.targets",
|
||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets",
|
||||
"buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets",
|
||||
"lib/net10.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/net462/Microsoft.Extensions.Options.dll",
|
||||
"lib/net462/Microsoft.Extensions.Options.xml",
|
||||
"lib/net6.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/net6.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/net7.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/net7.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/net9.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/net9.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.xml",
|
||||
"lib/netstandard2.1/Microsoft.Extensions.Options.dll",
|
||||
"lib/netstandard2.1/Microsoft.Extensions.Options.xml",
|
||||
"microsoft.extensions.options.8.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.options.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.options.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||
"sha512": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
|
||||
"Microsoft.Extensions.Primitives/10.0.2": {
|
||||
"sha512": "QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.primitives/8.0.0",
|
||||
"path": "microsoft.extensions.primitives/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/Microsoft.Extensions.Primitives.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net6.0/_._",
|
||||
"buildTransitive/net8.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets",
|
||||
"lib/net10.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net10.0/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/net462/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net462/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/net6.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net6.0/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/net7.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net7.0/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/net8.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net8.0/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/net9.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/net9.0/Microsoft.Extensions.Primitives.xml",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.xml",
|
||||
"microsoft.extensions.primitives.8.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.primitives.10.0.2.nupkg.sha512",
|
||||
"microsoft.extensions.primitives.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
@@ -4801,6 +5121,41 @@
|
||||
"pomelo.entityframeworkcore.mysql.nuspec"
|
||||
]
|
||||
},
|
||||
"RabbitMQ.Client/7.1.2": {
|
||||
"sha512": "y3c6ulgULScWthHw5PLM1ShHRLhxg0vCtzX/hh61gRgNecL3ZC3WoBW2HYHoXOVRqTl99Br9E7CZEytGZEsCyQ==",
|
||||
"type": "package",
|
||||
"path": "rabbitmq.client/7.1.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"README.md",
|
||||
"icon.png",
|
||||
"lib/net8.0/RabbitMQ.Client.dll",
|
||||
"lib/net8.0/RabbitMQ.Client.xml",
|
||||
"lib/netstandard2.0/RabbitMQ.Client.dll",
|
||||
"lib/netstandard2.0/RabbitMQ.Client.xml",
|
||||
"rabbitmq.client.7.1.2.nupkg.sha512",
|
||||
"rabbitmq.client.nuspec"
|
||||
]
|
||||
},
|
||||
"RedLock.net/2.3.2": {
|
||||
"sha512": "jlrALAArm4dCE292U3EtRoMnVKJ9M6sunbZn/oG5OuzlGtTpusXBfvDrnGWbgGDlWV027f5E9H5CiVnPxiq8+g==",
|
||||
"type": "package",
|
||||
"path": "redlock.net/2.3.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/net461/RedLockNet.Abstractions.dll",
|
||||
"lib/net461/RedLockNet.SERedis.dll",
|
||||
"lib/net472/RedLockNet.Abstractions.dll",
|
||||
"lib/net472/RedLockNet.SERedis.dll",
|
||||
"lib/netstandard2.0/RedLockNet.Abstractions.dll",
|
||||
"lib/netstandard2.0/RedLockNet.SERedis.dll",
|
||||
"redlock-icon.png",
|
||||
"redlock.net.2.3.2.nupkg.sha512",
|
||||
"redlock.net.nuspec"
|
||||
]
|
||||
},
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
|
||||
"sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==",
|
||||
"type": "package",
|
||||
@@ -5025,6 +5380,22 @@
|
||||
"runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so"
|
||||
]
|
||||
},
|
||||
"SixLabors.ImageSharp/3.1.12": {
|
||||
"sha512": "iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
|
||||
"type": "package",
|
||||
"path": "sixlabors.imagesharp/3.1.12",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE",
|
||||
"build/SixLabors.ImageSharp.props",
|
||||
"lib/net6.0/SixLabors.ImageSharp.dll",
|
||||
"lib/net6.0/SixLabors.ImageSharp.xml",
|
||||
"sixlabors.imagesharp.128.png",
|
||||
"sixlabors.imagesharp.3.1.12.nupkg.sha512",
|
||||
"sixlabors.imagesharp.nuspec"
|
||||
]
|
||||
},
|
||||
"StackExchange.Redis/2.9.32": {
|
||||
"sha512": "j5Rjbf7gWz5izrn0UWQy9RlQY4cQDPkwJfVqATnVsOa/+zzJrps12LOgacMsDl/Vit2f01cDiDkG/Rst8v2iGw==",
|
||||
"type": "package",
|
||||
@@ -5468,25 +5839,32 @@
|
||||
"system.diagnostics.debug.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/4.3.0": {
|
||||
"sha512": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
|
||||
"System.Diagnostics.DiagnosticSource/10.0.2": {
|
||||
"sha512": "lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==",
|
||||
"type": "package",
|
||||
"path": "system.diagnostics.diagnosticsource/4.3.0",
|
||||
"path": "system.diagnostics.diagnosticsource/10.0.2",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/net46/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/net46/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml",
|
||||
"system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512",
|
||||
"system.diagnostics.diagnosticsource.nuspec"
|
||||
"Icon.png",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net8.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets",
|
||||
"lib/net10.0/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/net10.0/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/net462/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/net462/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/net8.0/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/net9.0/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/net9.0/System.Diagnostics.DiagnosticSource.xml",
|
||||
"lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll",
|
||||
"lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml",
|
||||
"system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512",
|
||||
"system.diagnostics.diagnosticsource.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Diagnostics.EventLog/6.0.0": {
|
||||
@@ -8051,6 +8429,35 @@
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Threading.RateLimiting/8.0.0": {
|
||||
"sha512": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==",
|
||||
"type": "package",
|
||||
"path": "system.threading.ratelimiting/8.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/System.Threading.RateLimiting.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net6.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/System.Threading.RateLimiting.targets",
|
||||
"lib/net462/System.Threading.RateLimiting.dll",
|
||||
"lib/net462/System.Threading.RateLimiting.xml",
|
||||
"lib/net6.0/System.Threading.RateLimiting.dll",
|
||||
"lib/net6.0/System.Threading.RateLimiting.xml",
|
||||
"lib/net7.0/System.Threading.RateLimiting.dll",
|
||||
"lib/net7.0/System.Threading.RateLimiting.xml",
|
||||
"lib/net8.0/System.Threading.RateLimiting.dll",
|
||||
"lib/net8.0/System.Threading.RateLimiting.xml",
|
||||
"lib/netstandard2.0/System.Threading.RateLimiting.dll",
|
||||
"lib/netstandard2.0/System.Threading.RateLimiting.xml",
|
||||
"system.threading.ratelimiting.8.0.0.nupkg.sha512",
|
||||
"system.threading.ratelimiting.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
|
||||
"type": "package",
|
||||
@@ -8588,7 +8995,7 @@
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "/x8TFp9yNjk=",
|
||||
"dgSpecHash": "E2DnflEnEuk=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj",
|
||||
"expectedPackageFiles": [
|
||||
@@ -8,6 +8,9 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\automapper.extensions.microsoft.dependencyinjection\\12.0.0\\automapper.extensions.microsoft.dependencyinjection.12.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\castle.core\\5.1.1\\castle.core.5.1.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\coverlet.collector\\6.0.0\\coverlet.collector.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\masstransit\\8.5.5\\masstransit.8.5.5.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\masstransit.abstractions\\8.5.5\\masstransit.abstractions.8.5.5.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\masstransit.rabbitmq\\8.5.5\\masstransit.rabbitmq.8.5.5.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.authentication.abstractions\\2.3.0\\microsoft.aspnetcore.authentication.abstractions.2.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.authentication.jwtbearer\\8.0.21\\microsoft.aspnetcore.authentication.jwtbearer.8.0.21.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.authorization\\2.3.0\\microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512",
|
||||
@@ -29,6 +32,7 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.signalr.protocols.json\\1.2.0\\microsoft.aspnetcore.signalr.protocols.json.1.2.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.websockets\\2.3.0\\microsoft.aspnetcore.websockets.2.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.aspnetcore.webutilities\\2.3.0\\microsoft.aspnetcore.webutilities.2.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\1.1.0\\microsoft.bcl.asyncinterfaces.1.1.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.codecoverage\\17.8.0\\microsoft.codecoverage.17.8.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.entityframeworkcore\\8.0.22\\microsoft.entityframeworkcore.8.0.22.nupkg.sha512",
|
||||
@@ -37,19 +41,22 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.entityframeworkcore.inmemory\\8.0.22\\microsoft.entityframeworkcore.inmemory.8.0.22.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\8.0.13\\microsoft.entityframeworkcore.relational.8.0.13.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.apidescription.server\\6.0.5\\microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\8.0.0\\microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\10.0.2\\microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.caching.memory\\8.0.1\\microsoft.extensions.caching.memory.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.caching.stackexchangeredis\\10.0.2\\microsoft.extensions.caching.stackexchangeredis.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\8.0.0\\microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.1\\microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\10.0.2\\microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\8.0.1\\microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.diagnostics.healthchecks\\8.0.0\\microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.diagnostics.healthchecks.abstractions\\8.0.0\\microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\8.0.0\\microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\8.0.1\\microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.logging\\8.0.1\\microsoft.extensions.logging.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\10.0.2\\microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.objectpool\\8.0.11\\microsoft.extensions.objectpool.8.0.11.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.options\\8.0.2\\microsoft.extensions.options.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.primitives\\8.0.0\\microsoft.extensions.primitives.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.options\\10.0.2\\microsoft.extensions.options.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.extensions.primitives\\10.0.2\\microsoft.extensions.primitives.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.14.0\\microsoft.identitymodel.abstractions.8.14.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.14.0\\microsoft.identitymodel.jsonwebtokens.8.14.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\microsoft.identitymodel.logging\\8.14.0\\microsoft.identitymodel.logging.8.14.0.nupkg.sha512",
|
||||
@@ -72,6 +79,8 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\nuget.frameworks\\6.5.0\\nuget.frameworks.6.5.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\pipelines.sockets.unofficial\\2.2.8\\pipelines.sockets.unofficial.2.2.8.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\pomelo.entityframeworkcore.mysql\\8.0.3\\pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\rabbitmq.client\\7.1.2\\rabbitmq.client.7.1.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\redlock.net\\2.3.2\\redlock.net.2.3.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
@@ -88,6 +97,7 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\sixlabors.imagesharp\\3.1.12\\sixlabors.imagesharp.3.1.12.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\stackexchange.redis\\2.9.32\\stackexchange.redis.2.9.32.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\swashbuckle.aspnetcore\\6.6.2\\swashbuckle.aspnetcore.6.6.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.6.2\\swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512",
|
||||
@@ -99,7 +109,7 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.console\\4.3.0\\system.console.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.diagnosticsource\\4.3.0\\system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.diagnosticsource\\10.0.2\\system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.eventlog\\6.0.0\\system.diagnostics.eventlog.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512",
|
||||
@@ -148,6 +158,7 @@
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading.channels\\8.0.0\\system.threading.channels.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading.ratelimiting\\8.0.0\\system.threading.ratelimiting.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading.tasks.extensions\\4.3.0\\system.threading.tasks.extensions.4.3.0.nupkg.sha512",
|
||||
"C:\\Users\\nanxun\\.nuget\\packages\\system.threading.timer\\4.3.0\\system.threading.timer.4.3.0.nupkg.sha512",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
bin/
|
||||
obj/
|
||||
.vs/
|
||||
.vs/
|
||||
uploads/
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.FriendAddHandler
|
||||
{
|
||||
public class FriendAddConversationHandler : IConsumer<FriendAddEvent>
|
||||
{
|
||||
private readonly IConversationService _cService;
|
||||
public FriendAddConversationHandler(IConversationService cService)
|
||||
{
|
||||
_cService = cService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<FriendAddEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
await _cService.MakeConversationAsync(@event.RequestUserId, @event.ResponseUserId, Models.ChatType.PRIVATE);
|
||||
await _cService.MakeConversationAsync(@event.ResponseUserId, @event.RequestUserId, Models.ChatType.PRIVATE);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.FriendAddHandler
|
||||
{
|
||||
public class FriendAddDBHandler : IConsumer<FriendAddEvent>
|
||||
{
|
||||
private readonly IFriendSerivce _friendService;
|
||||
private readonly ILogger<FriendAddDBHandler> _logger;
|
||||
public FriendAddDBHandler(IFriendSerivce friendService, ILogger<FriendAddDBHandler> logger)
|
||||
{
|
||||
_friendService = friendService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<FriendAddEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
|
||||
//为请求发起人添加好友记录
|
||||
await _friendService.MakeFriendshipAsync(
|
||||
@event.RequestUserId, @event.ResponseUserId, @event.RequestInfo.RemarkName);
|
||||
//为接收人添加好友记录
|
||||
await _friendService.MakeFriendshipAsync(
|
||||
@event.ResponseUserId, @event.RequestUserId, @event.requestUserRemarkname);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.FriendAddHandler
|
||||
{
|
||||
public class FriendAddSignalRHandler : IConsumer<FriendAddEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _chathub;
|
||||
public FriendAddSignalRHandler(IHubContext<ChatHub> chathub)
|
||||
{
|
||||
_chathub = chathub;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<FriendAddEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
var usersList = new List<string> {
|
||||
@event.RequestUserId.ToString(), @event.ResponseUserId.ToString()
|
||||
};
|
||||
var res = new HubResponse<MessageBaseDto>("Event", new MessageBaseDto()
|
||||
{
|
||||
ChatType = ChatType.PRIVATE,
|
||||
Content = "您有新的好友关系已添加",
|
||||
//MsgId = @event.EventId.ToString(),
|
||||
ReceiverId = @event.ResponseUserId,
|
||||
SenderId = @event.RequestUserId,
|
||||
TimeStamp = DateTime.Now
|
||||
});
|
||||
await _chathub.Clients.Users(usersList).SendAsync("ReceiveMessage", res);
|
||||
}
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupInviteActionUpdateHandler
|
||||
{
|
||||
public class RequestDbHandler : IConsumer<GroupInviteActionUpdateEvent>
|
||||
{
|
||||
private readonly IGroupService _groupService;
|
||||
public RequestDbHandler(IGroupService groupService)
|
||||
{
|
||||
_groupService = groupService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupInviteActionUpdateEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
if(@event.Action == Models.GroupInviteState.Passed)
|
||||
{
|
||||
await _groupService.MakeGroupRequestAsync(@event.UserId, @event.InviteUserId,@event.GroupId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.VOs.Group;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupInviteActionUpdateHandler
|
||||
{
|
||||
public class SignalRHandler : IConsumer<GroupInviteActionUpdateEvent>
|
||||
{
|
||||
private IHubContext<ChatHub> _hub;
|
||||
public SignalRHandler(IHubContext<ChatHub> hub)
|
||||
{
|
||||
_hub = hub;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupInviteActionUpdateEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
var msg = new HubResponse<GroupInviteActionUpdateVo>("Event", new GroupInviteActionUpdateVo
|
||||
{
|
||||
Action = @event.Action,
|
||||
GroupId = @event.GroupId,
|
||||
InvitedUserId = @event.UserId,
|
||||
InviteUserId = @event.InviteUserId,
|
||||
InviteId = @event.InviteId
|
||||
});
|
||||
|
||||
await _hub.Clients.Users([@event.UserId.ToString(), @event.InviteUserId.ToString()])
|
||||
.SendAsync("ReceiveMessage",msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.VOs.Group;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupInviteHandler
|
||||
{
|
||||
public class GroupInviteSignalRHandler : IConsumer<GroupInviteEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub;
|
||||
public GroupInviteSignalRHandler(IHubContext<ChatHub> hub)
|
||||
{
|
||||
_hub = hub;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupInviteEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
var list = @event.Ids.Select(id => id.ToString()).ToArray();
|
||||
var msg = new HubResponse<GroupInviteVo>("Event", new GroupInviteVo { GroupId = @event.GroupId, UserId = @event.UserId });
|
||||
await _hub.Clients.Users(list).SendAsync("ReceiveMessage", msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupJoinHandler
|
||||
{
|
||||
public class GroupJoinConversationHandler : IConsumer<GroupJoinEvent>
|
||||
{
|
||||
private IConversationService _conversationService;
|
||||
public GroupJoinConversationHandler(IConversationService conversationService)
|
||||
{
|
||||
_conversationService = conversationService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupJoinEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
await _conversationService.MakeConversationAsync(@event.UserId, @event.GroupId, Models.ChatType.GROUP);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupJoinHandler
|
||||
{
|
||||
public class GroupJoinDbHandler : IConsumer<GroupJoinEvent>
|
||||
{
|
||||
private readonly IGroupService _groupService;
|
||||
public GroupJoinDbHandler(IGroupService groupService)
|
||||
{
|
||||
_groupService = groupService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupJoinEvent> context)
|
||||
{
|
||||
await _groupService.MakeGroupMemberAsync(context.Message.UserId,
|
||||
context.Message.GroupId, context.Message.IsCreated ?
|
||||
Models.GroupMemberRole.Master : Models.GroupMemberRole.Normal);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs.Group;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupJoinHandler
|
||||
{
|
||||
public class GroupJoinSignalrHandler : IConsumer<GroupJoinEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub;
|
||||
private readonly IDatabase _redis;
|
||||
public GroupJoinSignalrHandler(IHubContext<ChatHub> hub, IConnectionMultiplexer connectionMultiplexer)
|
||||
{
|
||||
_hub = hub;
|
||||
_redis = connectionMultiplexer.GetDatabase();
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupJoinEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
string stramKey = StreamKeyBuilder.Group(@event.GroupId);
|
||||
//将用户加入群组通知
|
||||
var list = await _redis.SetMembersAsync(RedisKeys.GetConnectionIdKey(@event.UserId.ToString()));
|
||||
if(list != null && list.Length > 0)
|
||||
{
|
||||
var tasks = list.Select(connectionId =>
|
||||
_hub.Groups.AddToGroupAsync(connectionId!, stramKey)
|
||||
).ToList();
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
//发送通知给群成员
|
||||
var msg = new GroupJoinVo
|
||||
{
|
||||
GroupId = @event.GroupId,
|
||||
UserId = @event.UserId
|
||||
};
|
||||
await _hub.Clients.Group(stramKey).SendAsync("ReceiveMessage",new HubResponse<GroupJoinVo>("Event",msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Hubs;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupRequestHandler
|
||||
{
|
||||
public class GroupRequestSignalRHandler(IHubContext<ChatHub> hubContext) : IConsumer<GroupRequestEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub = hubContext;
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupRequestEvent> context)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using IM_API.Domain.Events;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupRequestHandler
|
||||
{
|
||||
public class NextEventHandler : IConsumer<GroupRequestEvent>
|
||||
{
|
||||
private readonly IPublishEndpoint _endpoint;
|
||||
public NextEventHandler(IPublishEndpoint endpoint)
|
||||
{
|
||||
_endpoint = endpoint;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupRequestEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
if(@event.Action == Models.GroupRequestState.Passed)
|
||||
{
|
||||
await _endpoint.Publish(new GroupJoinEvent
|
||||
{
|
||||
AggregateId = @event.AggregateId,
|
||||
OccurredAt = @event.OccurredAt,
|
||||
EventId = Guid.NewGuid(),
|
||||
GroupId = @event.GroupId,
|
||||
OperatorId = @event.OperatorId,
|
||||
UserId = @event.UserId
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
using IM_API.Domain.Events;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupRequestUpdateHandler
|
||||
{
|
||||
public class NextEventHandler : IConsumer<GroupRequestUpdateEvent>
|
||||
{
|
||||
private readonly IPublishEndpoint _endpoint;
|
||||
public NextEventHandler(IPublishEndpoint endpoint)
|
||||
{
|
||||
_endpoint = endpoint;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupRequestUpdateEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
if(@event.Action == Models.GroupRequestState.Passed)
|
||||
{
|
||||
await _endpoint.Publish(new GroupJoinEvent
|
||||
{
|
||||
AggregateId = @event.AggregateId,
|
||||
OccurredAt = @event.OccurredAt,
|
||||
EventId = Guid.NewGuid(),
|
||||
GroupId = @event.GroupId,
|
||||
OperatorId = @event.OperatorId,
|
||||
UserId = @event.UserId
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.VOs.Group;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.GroupRequestUpdateHandler
|
||||
{
|
||||
public class RequestUpdateSignalrHandler : IConsumer<GroupRequestUpdateEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub;
|
||||
public RequestUpdateSignalrHandler(IHubContext<ChatHub> hub)
|
||||
{
|
||||
_hub = hub;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<GroupRequestUpdateEvent> context)
|
||||
{
|
||||
var msg = new HubResponse<GroupRequestUpdateVo>("Event", new GroupRequestUpdateVo
|
||||
{
|
||||
GroupId = context.Message.GroupId,
|
||||
RequestId = context.Message.RequestId,
|
||||
UserId = context.Message.UserId
|
||||
});
|
||||
await _hub.Clients.User(context.Message.UserId.ToString()).SendAsync("ReceiveMessage", msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Application.Interfaces;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Exceptions;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Services;
|
||||
using IM_API.Tools;
|
||||
using MassTransit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.MessageCreatedHandler
|
||||
{
|
||||
public class ConversationEventHandler : IConsumer<MessageCreatedEvent>
|
||||
{
|
||||
private readonly IConversationService _conversationService;
|
||||
private readonly ILogger<ConversationEventHandler> _logger;
|
||||
private readonly IUserService _userSerivce;
|
||||
private readonly IGroupService _groupService;
|
||||
public ConversationEventHandler(
|
||||
IConversationService conversationService,
|
||||
ILogger<ConversationEventHandler> logger,
|
||||
IUserService userService,
|
||||
IGroupService groupService
|
||||
)
|
||||
{
|
||||
_conversationService = conversationService;
|
||||
_logger = logger;
|
||||
_userSerivce = userService;
|
||||
_groupService = groupService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
if (@event.ChatType == ChatType.GROUP)
|
||||
{
|
||||
var userinfo = await _userSerivce.GetUserInfoAsync(@event.MsgSenderId);
|
||||
await _groupService.UpdateGroupConversationAsync(new Dtos.Group.GroupUpdateConversationDto
|
||||
{
|
||||
GroupId = @event.MsgRecipientId,
|
||||
LastMessage = @event.MessageContent,
|
||||
LastSenderName = userinfo.NickName,
|
||||
LastUpdateTime = @event.MessageCreated,
|
||||
MaxSequenceId = @event.SequenceId
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
await _conversationService.UpdateConversationAfterSentAsync(new Dtos.Conversation.UpdateConversationDto
|
||||
{
|
||||
LastMessage = @event.MessageContent,
|
||||
LastSequenceId = @event.SequenceId,
|
||||
ReceiptId = @event.MsgRecipientId,
|
||||
SenderId = @event.MsgSenderId,
|
||||
StreamKey = @event.StreamKey,
|
||||
DateTime = @event.MessageCreated
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
using IM_API.Domain.Events;
|
||||
using MassTransit;
|
||||
using IM_API.Interface.Services;
|
||||
using AutoMapper;
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.MessageCreatedHandler
|
||||
{
|
||||
public class MessageCreatedDbHandler : IConsumer<MessageCreatedEvent>
|
||||
{
|
||||
private readonly IMessageSevice _messageService;
|
||||
public readonly IMapper _mapper;
|
||||
public MessageCreatedDbHandler(IMessageSevice messageSevice, IMapper mapper)
|
||||
{
|
||||
_messageService = messageSevice;
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
var msg = _mapper.Map<Message>(@event);
|
||||
await _messageService.MakeMessageAsync(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Application.Interfaces;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs.Message;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.MessageCreatedHandler
|
||||
{
|
||||
public class SignalREventHandler : IConsumer<MessageCreatedEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IUserService _userService;
|
||||
public SignalREventHandler(IHubContext<ChatHub> hub, IMapper mapper,
|
||||
IUserService userService)
|
||||
{
|
||||
_hub = hub;
|
||||
_mapper = mapper;
|
||||
_userService = userService;
|
||||
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
var @event = context.Message;
|
||||
try
|
||||
{
|
||||
var entity = _mapper.Map<Message>(@event);
|
||||
var messageBaseVo = _mapper.Map<MessageBaseVo>(entity);
|
||||
var senderinfo = await _userService.GetUserInfoAsync(@event.MsgSenderId);
|
||||
messageBaseVo.SenderName = senderinfo.NickName;
|
||||
messageBaseVo.SenderAvatar = senderinfo.Avatar ?? "";
|
||||
if (messageBaseVo.Type != MessageMsgType.Text)
|
||||
{
|
||||
messageBaseVo.Content = UrlTools.ProcessMessageUrl(messageBaseVo.Content, @event.BaseUrl);
|
||||
}
|
||||
await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse<MessageBaseVo>("Event", messageBaseVo));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"[SignalR] 发送失败: {ex.Message}");
|
||||
Console.ResetColor();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Friend;
|
||||
using IM_API.Hubs;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.RequestFriendHandler
|
||||
{
|
||||
public class RequestFriendSignalRHandler:IConsumer<RequestFriendEvent>
|
||||
{
|
||||
private readonly IHubContext<ChatHub> _hub;
|
||||
private readonly IUserService _userService;
|
||||
public RequestFriendSignalRHandler(IHubContext<ChatHub> hubContext, IUserService userService)
|
||||
{
|
||||
_hub = hubContext;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<RequestFriendEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
var userInfo = await _userService.GetUserInfoAsync(@event.FromUserId);
|
||||
var res = new HubResponse<FriendRequestResDto>("Event", new FriendRequestResDto()
|
||||
{
|
||||
RequestUser = @event.FromUserId,
|
||||
ResponseUser = @event.ToUserId,
|
||||
Created = DateTime.UtcNow,
|
||||
Description = @event.Description,
|
||||
Avatar = userInfo.Avatar,
|
||||
NickName = userInfo.NickName
|
||||
});
|
||||
await _hub.Clients.User(@event.ToUserId.ToString()).SendAsync("ReceiveMessage", res);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Interface.Services;
|
||||
using MassTransit;
|
||||
|
||||
namespace IM_API.Application.EventHandlers.UploadEventHandler
|
||||
{
|
||||
public class MergeEventHandler : IConsumer<UploadMergeEvent>
|
||||
{
|
||||
private readonly IStorageService _storage;
|
||||
public MergeEventHandler(IStorageService storage)
|
||||
{
|
||||
_storage = storage;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<UploadMergeEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
await _storage.MergeAsync(@event.TaskId, @event.ObjectName, @event.ChunckCount, @event.Parts);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using IM_API.Domain.Interfaces;
|
||||
|
||||
namespace IM_API.Application.Interfaces
|
||||
{
|
||||
public interface IEventBus
|
||||
{
|
||||
Task PublishAsync<TEvent>(TEvent @event) where TEvent : IEvent;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using IM_API.Domain.Interfaces;
|
||||
|
||||
namespace IM_API.Application.Interfaces
|
||||
{
|
||||
public interface IEventHandler<in TEvent> where TEvent : IEvent
|
||||
{
|
||||
Task Handle(TEvent @event);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Application.EventHandlers.FriendAddHandler;
|
||||
using IM_API.Application.EventHandlers.GroupInviteActionUpdateHandler;
|
||||
using IM_API.Application.EventHandlers.GroupInviteHandler;
|
||||
using IM_API.Application.EventHandlers.GroupJoinHandler;
|
||||
using IM_API.Application.EventHandlers.GroupRequestHandler;
|
||||
using IM_API.Application.EventHandlers.GroupRequestUpdateHandler;
|
||||
using IM_API.Application.EventHandlers.MessageCreatedHandler;
|
||||
using IM_API.Application.EventHandlers.RequestFriendHandler;
|
||||
using IM_API.Application.EventHandlers.UploadEventHandler;
|
||||
using IM_API.Configs.Options;
|
||||
using IM_API.Domain.Events;
|
||||
using MassTransit;
|
||||
using MySqlConnector;
|
||||
|
||||
namespace IM_API.Configs
|
||||
{
|
||||
public static class MQConfig
|
||||
{
|
||||
public static IServiceCollection AddRabbitMQ(this IServiceCollection services, RabbitMQOptions options)
|
||||
{
|
||||
services.AddMassTransit(x =>
|
||||
{
|
||||
x.AddConsumer<ConversationEventHandler>();
|
||||
x.AddConsumer<SignalREventHandler>();
|
||||
x.AddConsumer<FriendAddDBHandler>();
|
||||
x.AddConsumer<FriendAddSignalRHandler>();
|
||||
x.AddConsumer<RequestFriendSignalRHandler>();
|
||||
x.AddConsumer<FriendAddConversationHandler>();
|
||||
x.AddConsumer<MessageCreatedDbHandler>();
|
||||
x.AddConsumer<GroupJoinConversationHandler>();
|
||||
x.AddConsumer<GroupJoinDbHandler>();
|
||||
x.AddConsumer<GroupJoinSignalrHandler>();
|
||||
x.AddConsumer<GroupRequestSignalRHandler>();
|
||||
x.AddConsumer<Application.EventHandlers.GroupRequestHandler.NextEventHandler>();
|
||||
x.AddConsumer<Application.EventHandlers.GroupRequestUpdateHandler.NextEventHandler>();
|
||||
x.AddConsumer<GroupInviteSignalRHandler>();
|
||||
x.AddConsumer<RequestDbHandler>();
|
||||
x.AddConsumer<SignalRHandler>();
|
||||
x.AddConsumer<RequestUpdateSignalrHandler>();
|
||||
x.AddConsumer<MergeEventHandler>();
|
||||
x.UsingRabbitMq((ctx,cfg) =>
|
||||
{
|
||||
cfg.Host(options.Host, "/", h =>
|
||||
{
|
||||
h.Username(options.Username);
|
||||
h.Password(options.Password);
|
||||
});
|
||||
cfg.ConfigureEndpoints(ctx);
|
||||
cfg.UseMessageRetry(r =>
|
||||
{
|
||||
r.Handle<IOException>();
|
||||
r.Handle<MySqlException>();
|
||||
r.Ignore<AutoMapperMappingException>();
|
||||
r.Exponential(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(2));
|
||||
});
|
||||
cfg.ConfigureEndpoints(ctx);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,18 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Auth;
|
||||
using IM_API.Dtos.Friend;
|
||||
using IM_API.Dtos.Group;
|
||||
using IM_API.Dtos.Message;
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Models;
|
||||
using IM_API.Models.Upload;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs;
|
||||
using IM_API.VOs.Conversation;
|
||||
using IM_API.VOs.Group;
|
||||
using IM_API.VOs.Message;
|
||||
|
||||
namespace IM_API.Configs
|
||||
{
|
||||
@@ -25,13 +37,16 @@ namespace IM_API.Configs
|
||||
.ForMember(dest => dest.IsDeleted,opt => opt.MapFrom(src => 0))
|
||||
;
|
||||
//好友信息模型转换
|
||||
CreateMap<Friend, FriendInfoDto>();
|
||||
CreateMap<Friend, FriendInfoDto>()
|
||||
.ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src.FriendNavigation))
|
||||
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
|
||||
;
|
||||
//好友请求通过后新增好友关系
|
||||
CreateMap<FriendRequest, Friend>()
|
||||
.ForMember(dest => dest.UserId , opt => opt.MapFrom(src => src.RequestUser))
|
||||
.ForMember(dest => dest.FriendId , opt => opt.MapFrom(src => src.ResponseUser))
|
||||
.ForMember(dest => dest.StatusEnum , opt =>opt.MapFrom(src => FriendStatus.Added))
|
||||
.ForMember(dest => dest.RemarkName , opt => opt.MapFrom(src => src.ResponseUserNavigation.NickName))
|
||||
CreateMap<FriendRequestDto, Friend>()
|
||||
.ForMember(dest => dest.UserId , opt => opt.MapFrom(src => src.FromUserId))
|
||||
.ForMember(dest => dest.FriendId , opt => opt.MapFrom(src => src.ToUserId))
|
||||
.ForMember(dest => dest.StatusEnum , opt =>opt.MapFrom(src => FriendStatus.Pending))
|
||||
.ForMember(dest => dest.RemarkName , opt => opt.MapFrom(src => src.RemarkName))
|
||||
.ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.Now))
|
||||
;
|
||||
//发起好友请求转换请求对象
|
||||
@@ -42,28 +57,164 @@ namespace IM_API.Configs
|
||||
.ForMember(dest => dest.StateEnum , opt => opt.MapFrom(src => FriendRequestState.Pending))
|
||||
.ForMember(dest => dest.Description , opt => opt.MapFrom(src => src.Description))
|
||||
;
|
||||
|
||||
CreateMap<FriendRequest, FriendRequestDto>()
|
||||
.ForMember(dest => dest.ToUserId, opt => opt.MapFrom(src => src.ResponseUser))
|
||||
.ForMember(dest => dest.FromUserId, opt => opt.MapFrom(src => src.RequestUser))
|
||||
.ForMember(dest => dest.RemarkName, opt => opt.MapFrom(src => src.RemarkName))
|
||||
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
|
||||
;
|
||||
//消息模型转换
|
||||
CreateMap<Message, MessageBaseDto>()
|
||||
.ForMember(dest => dest.Type , opt => opt.MapFrom(src => src.MsgTypeEnum.ToString()))
|
||||
.ForMember(dest => dest.MsgId , opt => opt.MapFrom(src => src.Id))
|
||||
CreateMap<Message, MessageBaseVo>()
|
||||
.ForMember(dest => dest.Type , opt => opt.MapFrom(src => src.MsgTypeEnum))
|
||||
.ForMember(dest => dest.MsgId , opt => opt.MapFrom(src => src.ClientMsgId))
|
||||
.ForMember(dest => dest.SenderId , opt => opt.MapFrom(src => src.Sender))
|
||||
.ForMember(dest => dest.ChatType , opt => opt.MapFrom(src => src.ChatTypeEnum.ToString()))
|
||||
.ForMember(dest => dest.ChatType , opt => opt.MapFrom(src => src.ChatTypeEnum))
|
||||
.ForMember(dest => dest.ReceiverId, opt => opt.MapFrom(src => src.Recipient))
|
||||
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
|
||||
.ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => src.Created))
|
||||
.ForMember(dest => dest.SequenceId, opt => opt.MapFrom(src => src.SequenceId))
|
||||
;
|
||||
CreateMap<MessageBaseDto, Message>()
|
||||
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.SenderId))
|
||||
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => Enum.Parse<ChatType>(src.ChatType,true)))
|
||||
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => Enum.Parse<MessageMsgType>(src.Type,true)))
|
||||
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => src.ChatType))
|
||||
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.Type))
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.TimeStamp))
|
||||
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
|
||||
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.ReceiverId))
|
||||
.ForMember(dest => dest.StreamKey, opt => opt.Ignore() )
|
||||
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.MsgType, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.ClientMsgId, opt => opt.MapFrom(src => src.MsgId))
|
||||
;
|
||||
|
||||
//会话对象深拷贝
|
||||
CreateMap<Conversation, Conversation>()
|
||||
.ForMember(dest => dest.Id, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.UserId, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.TargetId, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.StreamKey, opt => opt.Ignore())
|
||||
;
|
||||
|
||||
//消息对象转消息创建事件对象
|
||||
CreateMap<Message, MessageCreatedEvent>()
|
||||
.ForMember(dest => dest.MessageMsgType, opt => opt.MapFrom(src => src.MsgTypeEnum))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatTypeEnum))
|
||||
.ForMember(dest => dest.MessageContent, opt => opt.MapFrom(src => src.Content))
|
||||
.ForMember(dest => dest.State, opt => opt.MapFrom(src => src.StateEnum))
|
||||
.ForMember(dest => dest.MessageCreated, opt => opt.MapFrom(src => src.Created))
|
||||
.ForMember(dest => dest.MsgRecipientId, opt => opt.MapFrom(src => src.Recipient))
|
||||
.ForMember(dest => dest.MsgSenderId, opt => opt.MapFrom(src => src.Sender))
|
||||
.ForMember(dest => dest.EventId, opt => opt.MapFrom(src => Guid.NewGuid()))
|
||||
.ForMember(dest => dest.AggregateId, opt => opt.MapFrom(src => src.Sender.ToString()))
|
||||
.ForMember(dest => dest.OccurredAt , opt => opt.MapFrom(src => DateTime.Now))
|
||||
.ForMember(dest => dest.OperatorId, opt => opt.MapFrom(src => src.Sender))
|
||||
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
||||
;
|
||||
|
||||
CreateMap<MessageCreatedEvent, Message>()
|
||||
.ForMember(dest => dest.SequenceId, opt => opt.MapFrom(src => src.SequenceId))
|
||||
.ForMember(dest => dest.ClientMsgId, opt => opt.MapFrom(src => src.ClientMsgId))
|
||||
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => src.State))
|
||||
.ForMember(dest => dest.ChatTypeEnum, opt => opt.MapFrom(src => src.ChatType))
|
||||
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.MessageContent))
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.MessageCreated))
|
||||
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.MessageMsgType))
|
||||
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.MsgRecipientId))
|
||||
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.MsgSenderId))
|
||||
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.State, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.MsgType, opt => opt.Ignore());
|
||||
|
||||
//消息发送事件转换会话对象
|
||||
CreateMap<MessageCreatedEvent, Conversation>()
|
||||
//.ForMember(dest => dest.LastReadMessageId, opt => opt.MapFrom(src => src.MessageId))
|
||||
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.MessageContent))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatType))
|
||||
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.MsgSenderId))
|
||||
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.MsgRecipientId))
|
||||
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => 0))
|
||||
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
||||
.ForMember(dest => dest.LastMessageTime, opt => opt.MapFrom(src => DateTime.Now))
|
||||
;
|
||||
|
||||
//创建会话对象
|
||||
CreateMap<Conversation, ConversationVo>()
|
||||
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
|
||||
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.LastMessage))
|
||||
.ForMember(dest => dest.LastSequenceId, opt => opt.MapFrom(src => src.LastReadSequenceId))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatTypeEnum))
|
||||
.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => src.LastMessageTime))
|
||||
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.TargetId))
|
||||
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => src.UnreadCount))
|
||||
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId));
|
||||
|
||||
CreateMap<Friend, ConversationVo>()
|
||||
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
|
||||
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.RemarkName));
|
||||
|
||||
CreateMap<Group, ConversationVo>()
|
||||
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.Avatar))
|
||||
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.Name));
|
||||
|
||||
|
||||
//群模型转换
|
||||
CreateMap<Group, GroupInfoDto>()
|
||||
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.StatusEnum))
|
||||
.ForMember(dest => dest.AllMembersBanned, opt => opt.MapFrom(src => src.AllMembersBannedEnum))
|
||||
.ForMember(dest => dest.Auhority, opt => opt.MapFrom(src => src.AuhorityEnum));
|
||||
|
||||
CreateMap<GroupCreateDto, Group>()
|
||||
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
|
||||
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Avatar))
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => DateTime.Now))
|
||||
.ForMember(dest => dest.AllMembersBannedEnum, opt => opt.MapFrom(src => GroupAllMembersBanned.ALLOWED))
|
||||
.ForMember(dest => dest.AuhorityEnum, opt => opt.MapFrom(src => GroupAuhority.REQUIRE_CONSENT))
|
||||
.ForMember(dest => dest.StatusEnum, opt => opt.MapFrom(src => GroupStatus.Normal))
|
||||
;
|
||||
|
||||
//上传任务模型转换
|
||||
CreateMap<CreateUploadTaskDto, UploadTask>()
|
||||
.ForMember(dest => dest.FileName, opt => opt.MapFrom(src => src.FileName))
|
||||
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => UploadStatus.Created))
|
||||
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()))
|
||||
.ForMember(dest => dest.FileSize, opt => opt.MapFrom(src => src.FileSize))
|
||||
.ForMember(dest => dest.FileHash, opt => opt.MapFrom(src => src.FileHash))
|
||||
.ForMember(dest => dest.ContentType, opt => opt.MapFrom(src => src.ContentType))
|
||||
.ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => DateTime.UtcNow))
|
||||
;
|
||||
|
||||
CreateMap<UploadTask, CreateUploadTaskVo>()
|
||||
.ForMember(dest => dest.TaskId, opt => opt.MapFrom(src => src.Id))
|
||||
.ForMember(dest => dest.ChunkSize, opt => opt.MapFrom(src => src.ChunkSize))
|
||||
.ForMember(dest => dest.TotalChunks, opt => opt.MapFrom(src => src.TotalChunks))
|
||||
.ForMember(dest => dest.Concurrency, opt => opt.MapFrom(src => 5))
|
||||
.ForMember(dest => dest.Skip, opt => opt.MapFrom(src => false))
|
||||
.ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
|
||||
;
|
||||
|
||||
CreateMap<UploadTask, ImageDto>()
|
||||
.ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
|
||||
.ForMember(dest => dest.FileId, opt => opt.MapFrom(src => src.Id))
|
||||
.ForMember(dest => dest.Provider, opt => opt.MapFrom(src => src.StorageProvider))
|
||||
.ForMember(dest => dest.Format, opt => opt.MapFrom(src => src.ContentType))
|
||||
.ForMember(dest => dest.Size, opt => opt.MapFrom(src => src.FileSize));
|
||||
|
||||
CreateMap<ImageDto, VideoDto>();
|
||||
|
||||
//群成员模型
|
||||
CreateMap<UserInfoDto, GroupMemberVo>()
|
||||
.ForMember(dest => dest.Nickname, opt => opt.MapFrom(src => src.NickName))
|
||||
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Username))
|
||||
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id))
|
||||
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Avatar));
|
||||
|
||||
CreateMap<GroupMember, GroupMemberVo>()
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.Created))
|
||||
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => src.RoleEnum));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace IM_API.Configs.Options
|
||||
{
|
||||
public class ConnectionOptions
|
||||
{
|
||||
public string DefaultConnection { get; set; }
|
||||
public string Redis { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace IM_API.Configs.Options
|
||||
{
|
||||
public class FileUploadOptions
|
||||
{
|
||||
public string DefaultStorage { get; set; }
|
||||
public int ChunkSize { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace IM_API.Configs.Options
|
||||
{
|
||||
public class RabbitMQOptions
|
||||
{
|
||||
public string Host { get; set; }
|
||||
public int Port { get; set; }
|
||||
public string Username { get; set; }
|
||||
public string Password { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,17 @@
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Application.EventHandlers;
|
||||
using IM_API.Application.Interfaces;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Infrastructure.EventBus;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Services;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.AspNetCore.Http.HttpResults;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RedLockNet;
|
||||
using RedLockNet.SERedis;
|
||||
using RedLockNet.SERedis.Configuration;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace IM_API.Configs
|
||||
{
|
||||
@@ -7,14 +19,47 @@ namespace IM_API.Configs
|
||||
{
|
||||
public static IServiceCollection AddAllService(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
|
||||
services.AddAutoMapper(typeof(MapperConfig));
|
||||
services.AddTransient<IAuthService, AuthService>();
|
||||
services.AddTransient<IUserService, UserService>();
|
||||
services.AddTransient<IFriendSerivce, FriendService>();
|
||||
services.AddTransient<IMessageSevice, MessageService>();
|
||||
services.AddScoped<IAuthService, AuthService>();
|
||||
services.AddScoped<IUserService, UserService>();
|
||||
services.AddScoped<IFriendSerivce, FriendService>();
|
||||
services.AddScoped<IMessageSevice, MessageService>();
|
||||
services.AddScoped<IConversationService, ConversationService>();
|
||||
services.AddScoped<IGroupService, GroupService>();
|
||||
services.AddScoped<ISequenceIdService, SequenceIdService>();
|
||||
services.AddScoped<ICacheService, RedisCacheService>();
|
||||
services.AddScoped<IStorageService, LocalStorageService>();
|
||||
services.AddScoped<IUploadTaskService, UploadTaskService>();
|
||||
services.AddSingleton<IJWTService, JWTService>();
|
||||
services.AddSingleton<IRefreshTokenService,RedisRefreshTokenService>();
|
||||
services.AddSingleton<IRefreshTokenService, RedisRefreshTokenService>();
|
||||
services.AddSingleton<IDistributedLockFactory>(sp =>
|
||||
{
|
||||
var connection = sp.GetRequiredService<IConnectionMultiplexer>();
|
||||
// 这里可以配置多个 Redis 节点提高安全性,单机运行传一个即可
|
||||
return RedLockFactory.Create(new List<RedLockMultiplexer> { new RedLockMultiplexer(connection) });
|
||||
});
|
||||
return services;
|
||||
}
|
||||
}
|
||||
public static IServiceCollection AddModelValidation(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
services.Configure<ApiBehaviorOptions>(options =>
|
||||
{
|
||||
options.InvalidModelStateResponseFactory = context =>
|
||||
{
|
||||
var errors = context.ModelState
|
||||
.Where(e => e.Value.Errors.Count > 0)
|
||||
.Select(e => new
|
||||
{
|
||||
Field = e.Key,
|
||||
Message = e.Value.Errors.First().ErrorMessage
|
||||
});
|
||||
Console.WriteLine(errors);
|
||||
return new BadRequestObjectResult(new BaseResponse<object?>(CodeDefine.PARAMETER_ERROR.Code, errors.First().Message));
|
||||
};
|
||||
});
|
||||
return services;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
using IM_API.Dtos;
|
||||
using AutoMapper;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Auth;
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs.Auth;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.HttpResults;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace IM_API.Controllers
|
||||
{
|
||||
@@ -17,7 +22,12 @@ namespace IM_API.Controllers
|
||||
private readonly IJWTService _jwtService;
|
||||
private readonly IRefreshTokenService _refreshTokenService;
|
||||
private readonly IConfiguration _configuration;
|
||||
public AuthController(ILogger<AuthController> logger, IAuthService authService, IJWTService jwtService, IRefreshTokenService refreshTokenService, IConfiguration configuration,IUserService userService)
|
||||
private IMapper _mapper;
|
||||
public AuthController(ILogger<AuthController> logger, IAuthService authService,
|
||||
IJWTService jwtService, IRefreshTokenService refreshTokenService,
|
||||
IConfiguration configuration,IUserService userService,
|
||||
IMapper mapper
|
||||
)
|
||||
{
|
||||
_logger = logger;
|
||||
_authService = authService;
|
||||
@@ -25,16 +35,25 @@ namespace IM_API.Controllers
|
||||
_refreshTokenService = refreshTokenService;
|
||||
_configuration = configuration;
|
||||
_userService = userService;
|
||||
_mapper = mapper;
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> Login(LoginRequestDto dto)
|
||||
{
|
||||
Stopwatch sw = Stopwatch.StartNew();
|
||||
var user = await _authService.LoginAsync(dto);
|
||||
_logger.LogInformation("服务耗时: {ms}ms", sw.ElapsedMilliseconds);
|
||||
var userInfo = _mapper.Map<UserInfoDto>(user);
|
||||
_logger.LogInformation("序列化耗时: {ms}ms", sw.ElapsedMilliseconds);
|
||||
//生成凭证
|
||||
(string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(user.Id,user.Username,"user");
|
||||
_logger.LogInformation("Token生成耗时: {ms}ms", sw.ElapsedMilliseconds);
|
||||
//生成刷新凭证
|
||||
|
||||
string refreshToken = await _refreshTokenService.CreateRefreshTokenAsync(user.Id);
|
||||
var res = new BaseResponse<LoginDto>(new LoginDto(user.Id,token,refreshToken,expiresAt));
|
||||
_logger.LogInformation("RefreshToken生成耗时: {ms}ms", sw.ElapsedMilliseconds);
|
||||
var res = new BaseResponse<LoginVo>(new LoginVo(userInfo,token,refreshToken, expiresAt));
|
||||
_logger.LogInformation("总耗时: {ms}ms", sw.ElapsedMilliseconds);
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpPost]
|
||||
@@ -45,17 +64,18 @@ namespace IM_API.Controllers
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<LoginVo>),StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> Refresh(RefreshDto dto)
|
||||
{
|
||||
(bool ok,int userId) = await _refreshTokenService.ValidateRefreshTokenAsync(dto.refreshToken);
|
||||
if (!ok)
|
||||
{
|
||||
var err = new BaseResponse<LoginDto>(CodeDefine.AUTH_FAILED);
|
||||
var err = new BaseResponse<LoginVo>(CodeDefine.AUTH_FAILED);
|
||||
return Unauthorized(err);
|
||||
}
|
||||
var userinfo = await _userService.GetUserInfoAsync(userId);
|
||||
(string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(userinfo.Id,userinfo.Username,"user");
|
||||
var res = new BaseResponse<LoginDto>(new LoginDto(userinfo.Id,token,dto.refreshToken,expiresAt));
|
||||
var res = new BaseResponse<LoginVo>(new LoginVo(userinfo,token, dto.refreshToken, expiresAt));
|
||||
return Ok(res);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.VOs.Conversation;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace IM_API.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
public class ConversationController : ControllerBase
|
||||
{
|
||||
private readonly IConversationService _conversationSerivice;
|
||||
private readonly ILogger<ConversationController> _logger;
|
||||
public ConversationController(IConversationService conversationSerivice, ILogger<ConversationController> logger)
|
||||
{
|
||||
_conversationSerivice = conversationSerivice;
|
||||
_logger = logger;
|
||||
}
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> List()
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var list = await _conversationSerivice.GetConversationsAsync(int.Parse(userIdStr));
|
||||
var res = new BaseResponse<List<ConversationVo>>(list);
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> Get([FromQuery]int conversationId)
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var conversation = await _conversationSerivice.GetConversationByIdAsync(int.Parse(userIdStr), conversationId);
|
||||
var res = new BaseResponse<ConversationVo>(conversation);
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> Clear()
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
await _conversationSerivice.ClearConversationsAsync(int.Parse(userIdStr));
|
||||
return Ok(new BaseResponse<object?>());
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> Delete(int cid)
|
||||
{
|
||||
await _conversationSerivice.DeleteConversationAsync(cid);
|
||||
return Ok(new BaseResponse<object?>());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Friend;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
@@ -44,12 +45,12 @@ namespace IM_API.Controllers
|
||||
/// <param name="desc"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> Requests(bool isReceived,int page,int limit,bool desc)
|
||||
public async Task<IActionResult> Requests(int page,int limit,bool desc)
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
int userId = int.Parse(userIdStr);
|
||||
var list = await _friendService.GetFriendRequestListAsync(userId,isReceived,page,limit,desc);
|
||||
var res = new BaseResponse<List<FriendRequest>>(list);
|
||||
var list = await _friendService.GetFriendRequestListAsync(userId,page,limit,desc);
|
||||
var res = new BaseResponse<List<FriendRequestResDto>>(list);
|
||||
return Ok(res);
|
||||
}
|
||||
/// <summary>
|
||||
@@ -59,13 +60,15 @@ namespace IM_API.Controllers
|
||||
/// <param name="dto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> HandleRequest([FromRoute]int id, [FromBody]FriendRequestHandleDto dto)
|
||||
public async Task<IActionResult> HandleRequest(
|
||||
[FromQuery]int id, [FromBody]FriendRequestHandleDto dto
|
||||
)
|
||||
{
|
||||
await _friendService.HandleFriendRequestAsync(new HandleFriendRequestDto()
|
||||
{
|
||||
RequestId = id,
|
||||
RemarkName = dto.remarkName,
|
||||
Action = dto.action
|
||||
RemarkName = dto.RemarkName,
|
||||
Action = dto.Action
|
||||
});
|
||||
var res = new BaseResponse<object?>();
|
||||
return Ok(res);
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Group;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.VOs.Group;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace IM_API.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class GroupController : ControllerBase
|
||||
{
|
||||
private readonly IGroupService _groupService;
|
||||
private readonly ILogger<GroupController> _logger;
|
||||
public GroupController(IGroupService groupService, ILogger<GroupController> logger)
|
||||
{
|
||||
_groupService = groupService;
|
||||
_logger = logger;
|
||||
}
|
||||
[HttpGet]
|
||||
[ProducesResponseType(typeof(BaseResponse<List<GroupInfoDto>>) ,StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> GetGroups(int page = 1, int limit = 100, bool desc = false)
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var list = await _groupService.GetGroupListAsync(int.Parse(userIdStr), page, limit, desc);
|
||||
var res = new BaseResponse<List<GroupInfoDto>>(list);
|
||||
return Ok(res);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<GroupInfoDto>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> CreateGroup([FromBody]GroupCreateDto groupCreateDto)
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var groupInfo = await _groupService.CreateGroupAsync(int.Parse(userIdStr), groupCreateDto);
|
||||
var res = new BaseResponse<GroupInfoDto>(groupInfo);
|
||||
return Ok(res);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<object?>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> HandleGroupInvite([FromBody]HandleGroupInviteDto dto)
|
||||
{
|
||||
string userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier)!;
|
||||
await _groupService.HandleGroupInviteAsync(int.Parse(userIdStr), dto);
|
||||
var res = new BaseResponse<object?>();
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<object?>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> HandleGroupRequest([FromBody]HandleGroupRequestDto dto)
|
||||
{
|
||||
string userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
await _groupService.HandleGroupRequestAsync(int.Parse(userIdStr),dto);
|
||||
var res = new BaseResponse<object?>();
|
||||
return Ok(res);
|
||||
}
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<object?>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> InviteUser([FromBody]GroupInviteUserDto dto)
|
||||
{
|
||||
string userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
await _groupService.InviteUsersAsync(int.Parse(userIdStr), dto.GroupId, dto.Ids);
|
||||
var res = new BaseResponse<object?>();
|
||||
return Ok(res);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[ProducesResponseType(typeof(BaseResponse<List<GroupMemberVo>>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> GetGroupMembers([FromQuery]int groupId)
|
||||
{
|
||||
var useridStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var members = await _groupService.GetGroupMembers(int.Parse(useridStr), groupId);
|
||||
return Ok(new BaseResponse<List<GroupMemberVo>>(members));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using IM_API.Application.Interfaces;
|
||||
using IM_API.Domain.Events;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.Message;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs.Message;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace IM_API.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class MessageController : ControllerBase
|
||||
{
|
||||
private readonly IMessageSevice _messageService;
|
||||
private readonly ILogger<MessageController> _logger;
|
||||
public MessageController(IMessageSevice messageService,
|
||||
ILogger<MessageController> logger)
|
||||
{
|
||||
_messageService = messageService;
|
||||
_logger = logger;
|
||||
|
||||
}
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<MessageBaseVo>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> SendMessage(MessageBaseDto dto)
|
||||
{
|
||||
var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
MessageBaseVo messageBaseVo = new MessageBaseVo();
|
||||
var handledMessage = await _messageService.HandleFileMessageContentAsync(dto);
|
||||
if(dto.ChatType == Models.ChatType.PRIVATE)
|
||||
{
|
||||
messageBaseVo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
messageBaseVo = await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage);
|
||||
}
|
||||
|
||||
if (messageBaseVo.Type != MessageMsgType.Text)
|
||||
{
|
||||
var request = HttpContext?.Request;
|
||||
var baseUrl = $"{request.Scheme}://{request.Host}";
|
||||
messageBaseVo.Content = UrlTools.ProcessMessageUrl(messageBaseVo.Content, baseUrl);
|
||||
}
|
||||
return Ok(new BaseResponse<MessageBaseVo>(messageBaseVo));
|
||||
}
|
||||
[HttpGet]
|
||||
[ProducesResponseType(typeof(BaseResponse<List<MessageBaseVo>>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> GetMessageList([FromQuery]MessageQueryDto dto)
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
var msgList = await _messageService.GetMessagesAsync(int.Parse(userIdStr),dto);
|
||||
var res = new BaseResponse<List<MessageBaseVo>>(msgList);
|
||||
return Ok(res);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models.Upload;
|
||||
using IM_API.Tools;
|
||||
using IM_API.VOs;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using StackExchange.Redis;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using IDatabase = StackExchange.Redis.IDatabase;
|
||||
|
||||
namespace IM_API.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
public class UploadController : ControllerBase
|
||||
{
|
||||
private readonly IWebHostEnvironment _env;
|
||||
private readonly IStorageService _storage;
|
||||
private readonly IDatabase _redis;
|
||||
public UploadController(IWebHostEnvironment env, IStorageService storage, IConnectionMultiplexer connectionMultiplexer)
|
||||
{
|
||||
_env = env;
|
||||
_storage = storage;
|
||||
_redis = connectionMultiplexer.GetDatabase();
|
||||
}
|
||||
[HttpPost("local/{taskId}/parts/{partNumber}")]
|
||||
[ProducesResponseType(typeof(BaseResponse<object?>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> LocalUpload(Guid taskId, int partNumber, IFormFile file)
|
||||
{
|
||||
var baseDir = Path.Combine(_env.ContentRootPath, "uploads"); // 项目根目录下 uploads
|
||||
Directory.CreateDirectory(baseDir);
|
||||
|
||||
var path = Path.Combine(baseDir, "temp", taskId.ToString(), $"{partNumber}.part.tmp");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
||||
|
||||
using var stream = System.IO.File.Create(path);
|
||||
await file.CopyToAsync(stream);
|
||||
|
||||
await _redis.SetAddAsync(RedisKeys.GetUploadPartKey(taskId), partNumber);
|
||||
|
||||
return Ok(new BaseResponse<object?>());
|
||||
}
|
||||
|
||||
[HttpPost("CreateTask")]
|
||||
[ProducesResponseType(typeof(BaseResponse<CreateUploadTaskVo>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> CreateUpload(CreateUploadTaskDto dto)
|
||||
{
|
||||
var vo = await _storage.InitTaskAsync(dto);
|
||||
return Ok(new BaseResponse<CreateUploadTaskVo>(vo));
|
||||
}
|
||||
|
||||
[HttpPost("CreatePart")]
|
||||
public async Task<IActionResult> CreatePart(Guid taskId, int partNum)
|
||||
{
|
||||
var vo = await _storage.CreatePartInstructionAsync(taskId, partNum);
|
||||
return Ok(new BaseResponse<UploadPartInstructionVo>(vo));
|
||||
}
|
||||
|
||||
[HttpPost("CompleteTask")]
|
||||
public async Task<IActionResult> CompleteTask([FromQuery]Guid taskId, [FromBody]List<UploadPartDto> dtos)
|
||||
{
|
||||
var taskIdRes = await _storage.CompleteAsync(taskId, dtos);
|
||||
return Ok(new BaseResponse<string>(data: taskIdRes.ToString()));
|
||||
}
|
||||
|
||||
[HttpGet("events/{taskId}")]
|
||||
[AllowAnonymous]
|
||||
public async Task Events(Guid taskId)
|
||||
{
|
||||
Response.Headers.Add("Content-Type", "text/event-stream");
|
||||
Response.Headers.Add("Cache-Control", "no-cache");
|
||||
Response.Headers.Add("Connection", "keep-alive");
|
||||
var lastProgress = -1;
|
||||
|
||||
while (!HttpContext.RequestAborted.IsCancellationRequested)
|
||||
{
|
||||
var hash = await _redis.HashGetAllAsync(RedisKeys.MergeStatus(taskId));
|
||||
if (hash.Length == 0)
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
continue;
|
||||
}
|
||||
var status = hash.FirstOrDefault(x => x.Name == "status").Value;
|
||||
var progress = hash.FirstOrDefault(x => x.Name == "progress").Value;
|
||||
var url = hash.FirstOrDefault(x => x.Name == "url").Value;
|
||||
|
||||
// 避免重复发送
|
||||
if (progress != lastProgress)
|
||||
{
|
||||
var data = new
|
||||
{
|
||||
status = status.ToString(),
|
||||
progress = progress.ToString(),
|
||||
url = (string)url
|
||||
};
|
||||
|
||||
await Response.WriteAsync($"data: {JsonSerializer.Serialize(data)}\n\n");
|
||||
await Response.Body.FlushAsync();
|
||||
|
||||
// 完成后关闭 SSE
|
||||
if (status == "Completed")
|
||||
break;
|
||||
|
||||
await Task.Delay(1000); // 每秒检查一次
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("upload/{hash}")]
|
||||
public async Task<IActionResult> UploadSmallFile(IFormFile file,string hash)
|
||||
{
|
||||
using var stream = file.OpenReadStream();
|
||||
var res = await _storage.UploadSmallFileAsync(stream, file.FileName, file.ContentType, file.Length, hash);
|
||||
return Ok(new BaseResponse<UploadTask>(res));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
|
||||
@@ -44,7 +46,7 @@ namespace IM_API.Controllers
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
int userId = int.Parse(userIdStr);
|
||||
var userinfo = await _userService.UpdateUserAsync(userId,dto);
|
||||
var userinfo = await _userService.UpdateUserAsync(userId, dto);
|
||||
var res = new BaseResponse<UserInfoDto>(userinfo);
|
||||
return Ok(res);
|
||||
|
||||
@@ -83,7 +85,7 @@ namespace IM_API.Controllers
|
||||
{
|
||||
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
int userId = int.Parse(userIdStr);
|
||||
await _userService.ResetPasswordAsync(userId,dto.oldPassword,dto.Password);
|
||||
await _userService.ResetPasswordAsync(userId, dto.OldPassword, dto.Password);
|
||||
return Ok(new BaseResponse<object?>());
|
||||
}
|
||||
/// <summary>
|
||||
@@ -99,5 +101,14 @@ namespace IM_API.Controllers
|
||||
await _userService.UpdateOlineStatusAsync(userId, dto.OnlineStatus);
|
||||
return Ok(new BaseResponse<object?>());
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BaseResponse<List<UserInfoDto>>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> GetUserList([FromBody][Required]List<int> ids)
|
||||
{
|
||||
var users = await _userService.GetUserInfoListAsync(ids);
|
||||
var res = new BaseResponse<List<UserInfoDto>>(users);
|
||||
return Ok(res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using IM_API.Domain.Interfaces;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public abstract record DomainEvent: IEvent
|
||||
{
|
||||
public Guid EventId { get; init; } = Guid.NewGuid();
|
||||
public DateTimeOffset OccurredAt { get; init; } = DateTime.Now;
|
||||
public long OperatorId { get; init; }
|
||||
public string AggregateId { get; init; } = "";
|
||||
public abstract string EventType { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using IM_API.Dtos.Friend;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record FriendAddEvent:DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.FRIENDS_FRIEND_ADD";
|
||||
/// <summary>
|
||||
/// 发起请求用户
|
||||
/// </summary>
|
||||
public int RequestUserId { get; init; }
|
||||
public string? requestUserRemarkname { get; init; }
|
||||
/// <summary>
|
||||
/// 接受请求用户
|
||||
/// </summary>
|
||||
public int ResponseUserId { get; init; }
|
||||
|
||||
public FriendRequestDto RequestInfo { get; init; }
|
||||
/// <summary>
|
||||
/// 好友关系创建时间
|
||||
/// </summary>
|
||||
public DateTimeOffset Created { get; init; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record GroupInviteActionUpdateEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.GROUPS_INVITE_UPDATE";
|
||||
public int UserId { get; set; }
|
||||
public int InviteUserId { get; set; }
|
||||
public int InviteId { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
public GroupInviteState Action { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record GroupInviteEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.GROUPS_INVITE_ADD";
|
||||
public required List<int> Ids { get; init; }
|
||||
public int GroupId { get; init; }
|
||||
public int UserId { get; init; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record GroupJoinEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.GROUPS_MEMBER_ADD";
|
||||
public int UserId { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
public bool IsCreated { get; set; } = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using IM_API.Dtos.Group;
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record GroupRequestEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.GROUPS_GROUP_REQUEST";
|
||||
public int GroupId { get; init; }
|
||||
public int UserId { get; set; }
|
||||
public string Description { get; set; }
|
||||
public GroupRequestState Action { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record GroupRequestUpdateEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.GROUPS_REQUEST_UPDATE";
|
||||
public int UserId { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
public int AdminUserId { get; set; }
|
||||
public int RequestId { get; set; }
|
||||
public GroupRequestState Action { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record MessageCreatedEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.MESSAGE.MESSAGE_CREATED";
|
||||
public ChatType ChatType { get; set; }
|
||||
public MessageMsgType MessageMsgType { get; set; }
|
||||
public long SequenceId { get; set; }
|
||||
public string MessageContent { get; set; }
|
||||
public int MsgSenderId { get; set; }
|
||||
public int MsgRecipientId { get; set; }
|
||||
public MessageState State { get; set; }
|
||||
public DateTimeOffset MessageCreated { get; set; }
|
||||
public string StreamKey { get; set; }
|
||||
public Guid ClientMsgId { get; set; }
|
||||
public string BaseUrl { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record RequestFriendEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.FRIENDS_FRIEND_REQUEST";
|
||||
public int FromUserId { get; init; }
|
||||
public int ToUserId { get; init; }
|
||||
public string Description { get; init; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using IM_API.Dtos;
|
||||
|
||||
namespace IM_API.Domain.Events
|
||||
{
|
||||
public record UploadMergeEvent : DomainEvent
|
||||
{
|
||||
public override string EventType => "IM.FILES_UPLOAD_MERGE";
|
||||
public Guid TaskId { get; init; }
|
||||
public List<UploadPartDto> Parts { get; init; }
|
||||
public int ChunckCount { get; set; }
|
||||
public string ObjectName { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace IM_API.Domain.Interfaces
|
||||
{
|
||||
public interface IEvent
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace IM_API.Dtos
|
||||
namespace IM_API.Dtos.Auth
|
||||
{
|
||||
public record RefreshDto(string refreshToken);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using IM_API.Tools;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IM_API.Dtos.Auth
|
||||
{
|
||||
public class LoginRequestDto
|
||||
{
|
||||
[Required(ErrorMessage = "用户名不能为空")]
|
||||
[StringLength(20, ErrorMessage = "用户名不能超过20字符")]
|
||||
[RegularExpression(@"^[A-Za-z0-9]+$",ErrorMessage = "用户名只能为英文或数字")]
|
||||
public string Username { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "密码不能为空")]
|
||||
[StringLength(50, ErrorMessage = "密码不能超过50字符")]
|
||||
public string Password { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IM_API.Dtos.Auth
|
||||
{
|
||||
public class RegisterRequestDto
|
||||
{
|
||||
[Required(ErrorMessage = "用户名不能为空")]
|
||||
[MaxLength(20, ErrorMessage = "用户名不能超过20字符")]
|
||||
[RegularExpression(@"^[A-Za-z0-9]+$", ErrorMessage = "用户名只能为英文或数字")]
|
||||
public string Username { get; set; }
|
||||
[Required(ErrorMessage = "密码不能为空")]
|
||||
[MaxLength(50, ErrorMessage = "密码不能超过50字符")]
|
||||
public string Password { get; set; }
|
||||
[Required(ErrorMessage = "昵称不能为空")]
|
||||
[MaxLength(20, ErrorMessage = "昵称不能超过20字符")]
|
||||
|
||||
public string? NickName { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -73,6 +73,10 @@ namespace IM_API.Dtos
|
||||
this.Code = codeDefine.Code;
|
||||
this.Message = codeDefine.Message;
|
||||
}
|
||||
public BaseResponse() { }
|
||||
public BaseResponse()
|
||||
{
|
||||
this.Code = CodeDefine.SUCCESS.Code;
|
||||
this.Message = CodeDefine.SUCCESS.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace IM_API.Dtos
|
||||
namespace IM_API.Dtos.Conversation
|
||||
{
|
||||
public class ClearConversationsDto
|
||||
{
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace IM_API.Dtos.Conversation
|
||||
{
|
||||
public class UpdateConversationDto
|
||||
{
|
||||
public string StreamKey { get; set; }
|
||||
public int SenderId { get; set; }
|
||||
public int ReceiptId { get; set; }
|
||||
public string LastMessage { get; set; }
|
||||
public long LastSequenceId { get; set; }
|
||||
public DateTimeOffset DateTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class CreateUploadTaskDto
|
||||
{
|
||||
public string FileName { get; set; } = default!;
|
||||
public long FileSize { get; set; }
|
||||
public string ContentType { get; set; } = default!;
|
||||
public string FileHash { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using IM_API.Dtos.User;
|
||||
using IM_API.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IM_API.Dtos.Friend
|
||||
{
|
||||
public record FriendInfoDto
|
||||
{
|
||||
public int Id { get; init; }
|
||||
|
||||
public int UserId { get; init; }
|
||||
|
||||
public int FriendId { get; init; }
|
||||
|
||||
public FriendStatus StatusEnum { get; init; }
|
||||
|
||||
public DateTimeOffset Created { get; init; }
|
||||
|
||||
public string RemarkName { get; init; } = string.Empty;
|
||||
|
||||
public string? Avatar { get; init; }
|
||||
public UserInfoDto UserInfo { get; init; }
|
||||
}
|
||||
|
||||
public record FriendRequestHandleDto
|
||||
{
|
||||
[Required(ErrorMessage = "操作必填")]
|
||||
public HandleFriendRequestAction Action { get; init; }
|
||||
|
||||
[StringLength(20, ErrorMessage = "备注名最大20个字符")]
|
||||
public string? RemarkName { get; init; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IM_API.Dtos.Friend
|
||||
{
|
||||
public class FriendRequestDto
|
||||
{
|
||||
public int? FromUserId { get; set; }
|
||||
public int ToUserId { get; set; }
|
||||
[Required(ErrorMessage = "备注名必填")]
|
||||
[StringLength(20, ErrorMessage = "备注名不能超过20位字符")]
|
||||
public string? RemarkName { get; set; }
|
||||
[StringLength(50, ErrorMessage = "描述不能超过50字符")]
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Dtos.Friend
|
||||
{
|
||||
public class FriendRequestResDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 申请人
|
||||
/// </summary>
|
||||
public int RequestUser { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 被申请人
|
||||
/// </summary>
|
||||
public int ResponseUser { get; set; }
|
||||
public string Avatar { get; set; }
|
||||
public string NickName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 申请时间
|
||||
/// </summary>
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 申请附言
|
||||
/// </summary>
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 申请状态(0:待通过,1:拒绝,2:同意,3:拉黑)
|
||||
/// </summary>
|
||||
public FriendRequestState State { get; set; }
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace IM_API.Dtos
|
||||
namespace IM_API.Dtos.Friend
|
||||
{
|
||||
public class HandleFriendRequestDto
|
||||
{
|
||||
@@ -1,7 +0,0 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public record FriendInfoDto(int Id, int UserId,int FriendId,FriendStatus StatusEnum,DateTime Created,string RemarkName,string? Avatar);
|
||||
public record FriendRequestHandleDto(HandleFriendRequestAction action,string? remarkName);
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class FriendRequestDto
|
||||
{
|
||||
public int FromUserId { get; set; }
|
||||
public int ToUserId { get; set; }
|
||||
public string? RemarkName { get; set; }
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using IM_API.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class GroupCreateDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 群聊名称
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "群名称必填")]
|
||||
[MaxLength(20, ErrorMessage = "群名称不能大于20字符")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 群头像
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "群头像必填")]
|
||||
public string Avatar { get; set; } = null!;
|
||||
public List<int>? UserIDs { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class GroupInfoDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群聊名称
|
||||
/// </summary>
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 群主
|
||||
/// </summary>
|
||||
public int GroupMaster { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群权限
|
||||
/// (0:需管理员同意,1:任意人可加群,2:不允许任何人加入)
|
||||
/// </summary>
|
||||
public GroupAuhority Auhority { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 全员禁言(0允许发言,2全员禁言)
|
||||
/// </summary>
|
||||
public GroupAllMembersBanned AllMembersBanned { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群聊状态
|
||||
/// (1:正常,2:封禁)
|
||||
/// </summary>
|
||||
public GroupStatus Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群公告
|
||||
/// </summary>
|
||||
public string? Announcement { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群聊创建时间
|
||||
/// </summary>
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群头像
|
||||
/// </summary>
|
||||
public string Avatar { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class GroupInviteUserDto
|
||||
{
|
||||
public int GroupId { get; set; }
|
||||
public List<int> Ids { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class GroupUpdateConversationDto
|
||||
{
|
||||
public int GroupId { get; set; }
|
||||
public long MaxSequenceId { get; set; }
|
||||
public string LastMessage { get; set; }
|
||||
public string LastSenderName { get; set; }
|
||||
public DateTimeOffset LastUpdateTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class HandleGroupInviteDto
|
||||
{
|
||||
public int InviteId { get; set; }
|
||||
public GroupInviteState Action { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using IM_API.Models;
|
||||
|
||||
namespace IM_API.Dtos.Group
|
||||
{
|
||||
public class HandleGroupRequestDto
|
||||
{
|
||||
public int RequestId { get; set; }
|
||||
public GroupRequestState Action { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using IM_API.Tools;
|
||||
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class HubResponse<T>
|
||||
{
|
||||
public int Code { get; init; }
|
||||
public string Method { get; init; }
|
||||
public HubResponseType Type { get; init; }
|
||||
public string Message { get; init; }
|
||||
public T? Data { get; init; }
|
||||
public HubResponse(string method)
|
||||
{
|
||||
Code = CodeDefine.SUCCESS.Code;
|
||||
Message = CodeDefine.SUCCESS.Message;
|
||||
Type = HubResponseType.ActionStatus;
|
||||
Method = method;
|
||||
}
|
||||
public HubResponse(string method,T data)
|
||||
{
|
||||
Code = CodeDefine.SUCCESS.Code;
|
||||
Message = CodeDefine.SUCCESS.Message;
|
||||
Type = HubResponseType.ActionStatus;
|
||||
Data = data;
|
||||
Method = method;
|
||||
}
|
||||
public HubResponse(CodeDefine codedefine,string method)
|
||||
{
|
||||
Code = codedefine.Code;
|
||||
Method = method;
|
||||
Message = codedefine.Message;
|
||||
Type = HubResponseType.ActionStatus;
|
||||
}
|
||||
public HubResponse(CodeDefine codeDefine, string method, HubResponseType type, T? data)
|
||||
{
|
||||
Code = codeDefine.Code;
|
||||
Method = method;
|
||||
Type = type;
|
||||
Message = codeDefine.Message;
|
||||
Data = data;
|
||||
}
|
||||
}
|
||||
public enum HubResponseType
|
||||
{
|
||||
ChatMsg = 1, // 聊天内容
|
||||
SystemNotice = 2, // 系统通知(如:申请好友成功)
|
||||
ActionStatus = 3 // 状态变更(如:对方正在输入、已读回执)
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class LoginDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Token { get; set; }
|
||||
public string RefreshToken { get; set; }
|
||||
public DateTime ExpireAt { get; set; }
|
||||
public LoginDto(int id,string token,string refreshToken,DateTime expireAt) {
|
||||
this.Id = id;
|
||||
this.Token = token;
|
||||
this.RefreshToken = refreshToken;
|
||||
this.ExpireAt = expireAt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class LoginRequestDto
|
||||
{
|
||||
public string Username { get; set; }
|
||||
public string Password { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
namespace IM_API.Dtos.Message
|
||||
{
|
||||
public class RequestMessageType
|
||||
{
|
||||
public Guid FileId { get; set; }
|
||||
public long Size { get; set; }
|
||||
}
|
||||
public class BaseMessageType: RequestMessageType
|
||||
{
|
||||
public string Url { get; set; }
|
||||
public string Provider { get; set; }
|
||||
public string Format { get; set; }
|
||||
public string Text { get; set; }
|
||||
}
|
||||
public class ImageDto() : BaseMessageType
|
||||
{
|
||||
public string Thumb { get; set; }
|
||||
public int W { get; set; }
|
||||
public int H { get; set; }
|
||||
}
|
||||
|
||||
public class VideoDto() : ImageDto
|
||||
{
|
||||
public int Duration { get; set; }
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user