Compare commits

..

1 Commits
main ... y1

Author SHA1 Message Date
f6ff17ed02 Merge pull request 'main' (#54) from main into y1
Reviewed-on: #54
2026-01-30 00:45:07 +08:00
350 changed files with 1780 additions and 42158 deletions

View File

@ -1,28 +0,0 @@
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: "在此粘贴浏览器或后端的报错信息..."

View File

@ -1,3 +0,0 @@
bin/
obj/
.vs/

View File

@ -1,18 +1,16 @@
using AutoMapper; using Xunit;
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.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Moq; using Moq;
using AutoMapper;
using IM_API.Services;
using IM_API.Models;
using IM_API.Dtos;
using IM_API.Exceptions;
using IM_API.Tools;
using Microsoft.Extensions.Logging;
using System; using System;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit;
public class AuthServiceTests public class AuthServiceTests
{ {
@ -59,8 +57,7 @@ public class AuthServiceTests
{ {
var loggerMock = new Mock<ILogger<AuthService>>(); var loggerMock = new Mock<ILogger<AuthService>>();
var mapperToUse = mapper ?? CreateMapper(); var mapperToUse = mapper ?? CreateMapper();
var mockCache = new Mock<ICacheService>(); return new AuthService(context, loggerMock.Object, mapperToUse);
return new AuthService(context, loggerMock.Object, mapperToUse,mockCache.Object);
} }
// --------------------- 测试用例 --------------------- // --------------------- 测试用例 ---------------------

View File

@ -1,30 +1,25 @@
using AutoMapper; using Xunit;
using IM_API.Domain.Events;
using IM_API.Dtos.Friend;
using IM_API.Exceptions;
using IM_API.Models;
using IM_API.Services;
using MassTransit; // 必须引入
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Moq; using Moq;
using System; using AutoMapper;
using Microsoft.Extensions.Logging;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit; using System;
using IM_API.Services;
using IM_API.Models;
using IM_API.Dtos;
using IM_API.Exceptions;
using IM_API.Tools;
public class FriendServiceTests public class FriendServiceTests
{ {
private readonly Mock<IPublishEndpoint> _mockEndpoint = new();
private readonly Mock<ILogger<FriendService>> _mockLogger = new();
#region
private ImContext CreateDbContext() private ImContext CreateDbContext()
{ {
var options = new DbContextOptionsBuilder<ImContext>() var options = new DbContextOptionsBuilder<ImContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString()) // 确保每个测试数据库隔离 .UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options; .Options;
return new ImContext(options); return new ImContext(options);
} }
@ -32,118 +27,132 @@ public class FriendServiceTests
{ {
var config = new MapperConfiguration(cfg => var config = new MapperConfiguration(cfg =>
{ {
// 补充你业务中实际需要的映射规则
cfg.CreateMap<Friend, FriendInfoDto>(); cfg.CreateMap<Friend, FriendInfoDto>();
cfg.CreateMap<FriendRequestDto, FriendRequest>(); cfg.CreateMap<FriendRequestDto, FriendRequest>();
cfg.CreateMap<HandleFriendRequestDto, FriendRequest>();
cfg.CreateMap<FriendRequest, Friend>() cfg.CreateMap<FriendRequest, Friend>()
.ForMember(d => d.UserId, o => o.MapFrom(s => s.ResponseUser)) .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.ResponseUser))
.ForMember(d => d.FriendId, o => o.MapFrom(s => s.RequestUser)); .ForMember(dest => dest.FriendId, opt => opt.MapFrom(src => src.RequestUser))
.ForMember(dest => dest.RemarkName, opt => opt.MapFrom(src => "AutoAdded"));
}); });
return config.CreateMapper(); return config.CreateMapper();
} }
private FriendService CreateService(ImContext context) private FriendService CreateService(ImContext context)
{ {
// 注入 Mock 对象和真实的 Mapper/Context var logger = new Mock<ILogger<FriendService>>();
return new FriendService(context, _mockLogger.Object, CreateMapper(), _mockEndpoint.Object); return new FriendService(context, logger.Object, CreateMapper());
}
#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] [Fact]
public async Task SendFriendRequestAsync_UserNotFound_ShouldThrow() public async Task BlockFriendAsync_Should_Set_Status_To_Blocked()
{ {
// Arrange
var context = CreateDbContext(); var context = CreateDbContext();
var service = CreateService(context); context.Friends.Add(new Friend
var dto = new FriendRequestDto { ToUserId = 99 }; // 不存在的用户
// Act & Assert
await Assert.ThrowsAsync<BaseException>(() => service.SendFriendRequestAsync(dto));
}
[Fact]
public async Task SendFriendRequestAsync_AlreadyExists_ShouldThrow()
{ {
// Arrange Id = 1,
var context = CreateDbContext(); UserId = 10,
context.Users.Add(new User { Id = 2, Password = "123", Username = "111" }); FriendId = 20,
context.FriendRequests.Add(new FriendRequest StatusEnum = FriendStatus.Added,
{ RemarkName = "test remark"
RequestUser = 1,
ResponseUser = 2,
State = (sbyte)FriendRequestState.Pending,
RemarkName = "测试备注"
}); });
await context.SaveChangesAsync(); await context.SaveChangesAsync();
var service = CreateService(context); var service = CreateService(context);
// Act & Assert var result = await service.BlockeFriendAsync(1);
await Assert.ThrowsAsync<BaseException>(() => service.SendFriendRequestAsync(new FriendRequestDto { ToUserId = 2 }));
Assert.True(result);
Assert.Equal(FriendStatus.Blocked, context.Friends.Find(1).StatusEnum);
} }
[Fact] [Fact]
public async Task BlockFriendAsync_ValidId_ShouldUpdateStatus() public async Task BlockFriendAsync_Should_Throw_When_NotFound()
{ {
// Arrange var service = CreateService(CreateDbContext());
var context = CreateDbContext();
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);
// Act await Assert.ThrowsAsync<BaseException>(() => service.BlockeFriendAsync(99));
await service.BlockeFriendAsync(50);
// Assert
var updated = await context.Friends.FindAsync(50);
Assert.Equal(FriendStatus.Blocked, updated.StatusEnum);
} }
// --------------------------- 删除好友关系 ---------------------------
[Fact] [Fact]
public async Task GetFriendListAsync_ShouldFilterByStatus() public async Task DeleteFriendAsync_Should_Remove_Friend()
{ {
// Arrange
var context = CreateDbContext(); var context = CreateDbContext();
context.Friends.AddRange( context.Friends.Add(new Friend
new Friend { UserId = 1, FriendId = 2, StatusEnum = FriendStatus.Added,RemarkName = "111" }, {
new Friend { UserId = 1, FriendId = 3, StatusEnum = FriendStatus.Blocked,RemarkName = "222" } Id = 2,
); UserId = 1,
FriendId = 3,
RemarkName = "remark",
StatusEnum = FriendStatus.Added
});
await context.SaveChangesAsync(); await context.SaveChangesAsync();
var service = CreateService(context);
var result = await service.DeleteFriendAsync(2);
Assert.True(result);
Assert.Empty(context.Friends);
}
// --------------------------- 获取好友列表 ---------------------------
[Fact]
public async Task GetFriendListAsync_Should_Return_Only_Added_Friends()
{
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 }
});
await context.SaveChangesAsync();
var service = CreateService(context); var service = CreateService(context);
// Act
var result = await service.GetFriendListAsync(1, 1, 10, false); var result = await service.GetFriendListAsync(1, 1, 10, false);
// Assert Assert.Single(result);
//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
}));
} }
} }

View File

@ -1,94 +0,0 @@
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);
}
}
}

View File

@ -1,17 +1,15 @@
using AutoMapper; using Xunit;
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.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Moq; using Moq;
using StackExchange.Redis; using AutoMapper;
using IM_API.Services;
using IM_API.Models;
using IM_API.Dtos;
using IM_API.Exceptions;
using IM_API.Tools;
using Microsoft.Extensions.Logging;
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit;
public class UserServiceTests public class UserServiceTests
{ {
@ -38,9 +36,7 @@ public class UserServiceTests
{ {
var loggerMock = new Mock<ILogger<UserService>>(); var loggerMock = new Mock<ILogger<UserService>>();
var mapper = CreateMapper(); var mapper = CreateMapper();
var mockCache = new Mock<ICacheService>(); return new UserService(context, loggerMock.Object, mapper);
var res = new Mock<IConnectionMultiplexer>();
return new UserService(context, loggerMock.Object, mapper , mockCache.Object, res.Object);
} }
// ========== GetUserInfoAsync ========== // ========== GetUserInfoAsync ==========

View File

@ -34,7 +34,7 @@
"AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": { "AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": {
"dependencies": { "dependencies": {
"AutoMapper": "12.0.1", "AutoMapper": "12.0.1",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": { "lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": {
@ -55,47 +55,11 @@
} }
}, },
"coverlet.collector/6.0.0": {}, "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": { "Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0", "Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": { "Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": {
@ -111,8 +75,8 @@
}, },
"Microsoft.AspNetCore.Authorization/2.3.0": { "Microsoft.AspNetCore.Authorization/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": { "Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
@ -145,7 +109,7 @@
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0", "Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
"Microsoft.AspNetCore.WebUtilities": "2.3.0", "Microsoft.AspNetCore.WebUtilities": "2.3.0",
"Microsoft.Extensions.ObjectPool": "8.0.11", "Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Microsoft.Net.Http.Headers": "2.3.0" "Microsoft.Net.Http.Headers": "2.3.0"
} }
}, },
@ -185,16 +149,16 @@
}, },
"Microsoft.AspNetCore.Http.Features/2.3.0": { "Microsoft.AspNetCore.Http.Features/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.AspNetCore.Routing/2.3.0": { "Microsoft.AspNetCore.Routing/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.0", "Microsoft.AspNetCore.Http.Extensions": "2.3.0",
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0", "Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.ObjectPool": "8.0.11", "Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": { "Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
@ -213,7 +177,7 @@
"Microsoft.AspNetCore.SignalR.Common/1.2.0": { "Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0", "Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Newtonsoft.Json": "13.0.4", "Newtonsoft.Json": "13.0.4",
"System.Buffers": "4.6.0" "System.Buffers": "4.6.0"
} }
@ -223,8 +187,8 @@
"Microsoft.AspNetCore.Authorization": "2.3.0", "Microsoft.AspNetCore.Authorization": "2.3.0",
"Microsoft.AspNetCore.SignalR.Common": "1.2.0", "Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0", "Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"System.IO.Pipelines": "8.0.0", "System.IO.Pipelines": "8.0.0",
"System.Reflection.Emit": "4.7.0", "System.Reflection.Emit": "4.7.0",
"System.Threading.Channels": "8.0.0" "System.Threading.Channels": "8.0.0"
@ -240,7 +204,7 @@
"Microsoft.AspNetCore.WebSockets/2.3.0": { "Microsoft.AspNetCore.WebSockets/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.0", "Microsoft.AspNetCore.Http.Extensions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0" "System.Net.WebSockets.WebSocketProtocol": "5.1.0"
} }
}, },
@ -250,14 +214,6 @@
"System.Text.Encodings.Web": "8.0.0" "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": { "Microsoft.CodeCoverage/17.8.0": {
"runtime": { "runtime": {
"lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": { "lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {
@ -314,24 +270,18 @@
} }
}, },
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {}, "Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
},
"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": { "Microsoft.Extensions.Caching.Memory/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "10.0.2", "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": { "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
@ -340,28 +290,14 @@
} }
} }
}, },
"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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection/8.0.1": { "Microsoft.Extensions.DependencyInjection/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2" "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
@ -370,18 +306,18 @@
} }
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.1024.46610"
} }
} }
}, },
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
@ -390,27 +326,18 @@
} }
} }
}, },
"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": { "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.Extensions.Hosting.Abstractions/8.0.1": { "Microsoft.Extensions.Hosting.Abstractions/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2" "Microsoft.Extensions.Logging.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
@ -422,8 +349,8 @@
"Microsoft.Extensions.Logging/8.0.1": { "Microsoft.Extensions.Logging/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.1", "Microsoft.Extensions.DependencyInjection": "8.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.dll": { "lib/net8.0/Microsoft.Extensions.Logging.dll": {
@ -432,15 +359,14 @@
} }
} }
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
"System.Diagnostics.DiagnosticSource": "10.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.1024.46610"
} }
} }
}, },
@ -452,26 +378,19 @@
} }
} }
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Options.dll": { "lib/net8.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.224.6711"
}
}
},
"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": { "Microsoft.IdentityModel.Abstractions/8.14.0": {
"runtime": { "runtime": {
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": { "lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
@ -528,7 +447,7 @@
}, },
"Microsoft.IdentityModel.Tokens/8.14.0": { "Microsoft.IdentityModel.Tokens/8.14.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.IdentityModel.Logging": "8.14.0" "Microsoft.IdentityModel.Logging": "8.14.0"
}, },
"runtime": { "runtime": {
@ -540,7 +459,7 @@
}, },
"Microsoft.Net.Http.Headers/2.3.0": { "Microsoft.Net.Http.Headers/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2", "Microsoft.Extensions.Primitives": "8.0.0",
"System.Buffers": "4.6.0" "System.Buffers": "4.6.0"
} }
}, },
@ -828,7 +747,7 @@
}, },
"MySqlConnector/2.3.5": { "MySqlConnector/2.3.5": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2" "Microsoft.Extensions.Logging.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/MySqlConnector.dll": { "lib/net8.0/MySqlConnector.dll": {
@ -924,36 +843,6 @@
} }
} }
}, },
"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.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.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"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": {},
@ -1002,17 +891,9 @@
"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": {},
"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": {},
"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": {},
"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": { "StackExchange.Redis/2.9.32": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Pipelines.Sockets.Unofficial": "2.2.8" "Pipelines.Sockets.Unofficial": "2.2.8"
}, },
"runtime": { "runtime": {
@ -1103,12 +984,13 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Diagnostics.DiagnosticSource/10.0.2": { "System.Diagnostics.DiagnosticSource/4.3.0": {
"runtime": { "dependencies": {
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { "System.Collections": "4.3.0",
"assemblyVersion": "10.0.0.0", "System.Diagnostics.Tracing": "4.3.0",
"fileVersion": "10.0.225.61305" "System.Reflection": "4.3.0",
} "System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
} }
}, },
"System.Diagnostics.EventLog/6.0.0": {}, "System.Diagnostics.EventLog/6.0.0": {},
@ -1257,7 +1139,7 @@
"Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0", "System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.DiagnosticSource": "10.0.2", "System.Diagnostics.DiagnosticSource": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0", "System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0", "System.Globalization": "4.3.0",
"System.Globalization.Extensions": "4.3.0", "System.Globalization.Extensions": "4.3.0",
@ -1573,7 +1455,6 @@
} }
}, },
"System.Threading.Channels/8.0.0": {}, "System.Threading.Channels/8.0.0": {},
"System.Threading.RateLimiting/8.0.0": {},
"System.Threading.Tasks/4.3.0": { "System.Threading.Tasks/4.3.0": {
"dependencies": { "dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Platforms": "1.1.0",
@ -1692,15 +1573,11 @@
"dependencies": { "dependencies": {
"AutoMapper": "12.0.1", "AutoMapper": "12.0.1",
"AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0",
"MassTransit.RabbitMQ": "8.5.5",
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21", "Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
"Microsoft.AspNetCore.SignalR": "1.2.0", "Microsoft.AspNetCore.SignalR": "1.2.0",
"Microsoft.Extensions.Caching.StackExchangeRedis": "10.0.2",
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1", "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
"Newtonsoft.Json": "13.0.4", "Newtonsoft.Json": "13.0.4",
"Pomelo.EntityFrameworkCore.MySql": "8.0.3", "Pomelo.EntityFrameworkCore.MySql": "8.0.3",
"RedLock.net": "2.3.2",
"SixLabors.ImageSharp": "3.1.12",
"StackExchange.Redis": "2.9.32", "StackExchange.Redis": "2.9.32",
"Swashbuckle.AspNetCore": "6.6.2", "Swashbuckle.AspNetCore": "6.6.2",
"System.IdentityModel.Tokens.Jwt": "8.14.0" "System.IdentityModel.Tokens.Jwt": "8.14.0"
@ -1748,27 +1625,6 @@
"path": "coverlet.collector/6.0.0", "path": "coverlet.collector/6.0.0",
"hashPath": "coverlet.collector.6.0.0.nupkg.sha512" "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": { "Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1916,13 +1772,6 @@
"path": "microsoft.aspnetcore.webutilities/2.3.0", "path": "microsoft.aspnetcore.webutilities/2.3.0",
"hashPath": "microsoft.aspnetcore.webutilities.2.3.0.nupkg.sha512" "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": { "Microsoft.CodeCoverage/17.8.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1979,12 +1828,12 @@
"path": "microsoft.extensions.apidescription.server/6.0.5", "path": "microsoft.extensions.apidescription.server/6.0.5",
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512" "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
}, },
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==", "sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
"path": "microsoft.extensions.caching.abstractions/10.0.2", "path": "microsoft.extensions.caching.abstractions/8.0.0",
"hashPath": "microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
}, },
"Microsoft.Extensions.Caching.Memory/8.0.1": { "Microsoft.Extensions.Caching.Memory/8.0.1": {
"type": "package", "type": "package",
@ -1993,13 +1842,6 @@
"path": "microsoft.extensions.caching.memory/8.0.1", "path": "microsoft.extensions.caching.memory/8.0.1",
"hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512" "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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -2014,12 +1856,12 @@
"path": "microsoft.extensions.dependencyinjection/8.0.1", "path": "microsoft.extensions.dependencyinjection/8.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512"
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==", "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2", "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
"type": "package", "type": "package",
@ -2028,20 +1870,6 @@
"path": "microsoft.extensions.diagnostics.abstractions/8.0.1", "path": "microsoft.extensions.diagnostics.abstractions/8.0.1",
"hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512" "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": { "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -2063,12 +1891,12 @@
"path": "microsoft.extensions.logging/8.0.1", "path": "microsoft.extensions.logging/8.0.1",
"hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512"
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==", "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
"path": "microsoft.extensions.logging.abstractions/10.0.2", "path": "microsoft.extensions.logging.abstractions/8.0.2",
"hashPath": "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.ObjectPool/8.0.11": { "Microsoft.Extensions.ObjectPool/8.0.11": {
"type": "package", "type": "package",
@ -2077,19 +1905,19 @@
"path": "microsoft.extensions.objectpool/8.0.11", "path": "microsoft.extensions.objectpool/8.0.11",
"hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512" "hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512"
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==", "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
"path": "microsoft.extensions.options/10.0.2", "path": "microsoft.extensions.options/8.0.2",
"hashPath": "microsoft.extensions.options.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.Primitives/10.0.2": { "Microsoft.Extensions.Primitives/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==", "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
"path": "microsoft.extensions.primitives/10.0.2", "path": "microsoft.extensions.primitives/8.0.0",
"hashPath": "microsoft.extensions.primitives.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
}, },
"Microsoft.IdentityModel.Abstractions/8.14.0": { "Microsoft.IdentityModel.Abstractions/8.14.0": {
"type": "package", "type": "package",
@ -2245,20 +2073,6 @@
"path": "pomelo.entityframeworkcore.mysql/8.0.3", "path": "pomelo.entityframeworkcore.mysql/8.0.3",
"hashPath": "pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512" "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": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -2371,13 +2185,6 @@
"path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "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" "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": { "StackExchange.Redis/2.9.32": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -2455,12 +2262,12 @@
"path": "system.diagnostics.debug/4.3.0", "path": "system.diagnostics.debug/4.3.0",
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
}, },
"System.Diagnostics.DiagnosticSource/10.0.2": { "System.Diagnostics.DiagnosticSource/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==", "sha512": "sha512-tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
"path": "system.diagnostics.diagnosticsource/10.0.2", "path": "system.diagnostics.diagnosticsource/4.3.0",
"hashPath": "system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512" "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512"
}, },
"System.Diagnostics.EventLog/6.0.0": { "System.Diagnostics.EventLog/6.0.0": {
"type": "package", "type": "package",
@ -2798,13 +2605,6 @@
"path": "system.threading.channels/8.0.0", "path": "system.threading.channels/8.0.0",
"hashPath": "system.threading.channels.8.0.0.nupkg.sha512" "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": { "System.Threading.Tasks/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,

View File

@ -10,17 +10,13 @@
"dependencies": { "dependencies": {
"AutoMapper": "12.0.1", "AutoMapper": "12.0.1",
"AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0",
"MassTransit.RabbitMQ": "8.5.5",
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21", "Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
"Microsoft.AspNetCore.SignalR": "1.2.0", "Microsoft.AspNetCore.SignalR": "1.2.0",
"Microsoft.EntityFrameworkCore.Design": "8.0.21", "Microsoft.EntityFrameworkCore.Design": "8.0.21",
"Microsoft.EntityFrameworkCore.Tools": "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", "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
"Newtonsoft.Json": "13.0.4", "Newtonsoft.Json": "13.0.4",
"Pomelo.EntityFrameworkCore.MySql": "8.0.3", "Pomelo.EntityFrameworkCore.MySql": "8.0.3",
"RedLock.net": "2.3.2",
"SixLabors.ImageSharp": "3.1.12",
"StackExchange.Redis": "2.9.32", "StackExchange.Redis": "2.9.32",
"Swashbuckle.AspNetCore": "6.6.2", "Swashbuckle.AspNetCore": "6.6.2",
"System.IdentityModel.Tokens.Jwt": "8.14.0" "System.IdentityModel.Tokens.Jwt": "8.14.0"
@ -43,7 +39,7 @@
"AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": { "AutoMapper.Extensions.Microsoft.DependencyInjection/12.0.0": {
"dependencies": { "dependencies": {
"AutoMapper": "12.0.1", "AutoMapper": "12.0.1",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": { "lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": {
@ -60,47 +56,11 @@
} }
} }
}, },
"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": { "Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0", "Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": { "Microsoft.AspNetCore.Authentication.JwtBearer/8.0.21": {
@ -116,8 +76,8 @@
}, },
"Microsoft.AspNetCore.Authorization/2.3.0": { "Microsoft.AspNetCore.Authorization/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": { "Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
@ -150,7 +110,7 @@
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0", "Microsoft.AspNetCore.Http.Abstractions": "2.3.0",
"Microsoft.AspNetCore.WebUtilities": "2.3.0", "Microsoft.AspNetCore.WebUtilities": "2.3.0",
"Microsoft.Extensions.ObjectPool": "8.0.11", "Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Microsoft.Net.Http.Headers": "2.3.0" "Microsoft.Net.Http.Headers": "2.3.0"
} }
}, },
@ -190,16 +150,16 @@
}, },
"Microsoft.AspNetCore.Http.Features/2.3.0": { "Microsoft.AspNetCore.Http.Features/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.AspNetCore.Routing/2.3.0": { "Microsoft.AspNetCore.Routing/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.0", "Microsoft.AspNetCore.Http.Extensions": "2.3.0",
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0", "Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.ObjectPool": "8.0.11", "Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
} }
}, },
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": { "Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
@ -218,7 +178,7 @@
"Microsoft.AspNetCore.SignalR.Common/1.2.0": { "Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0", "Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Newtonsoft.Json": "13.0.4", "Newtonsoft.Json": "13.0.4",
"System.Buffers": "4.6.0" "System.Buffers": "4.6.0"
} }
@ -228,8 +188,8 @@
"Microsoft.AspNetCore.Authorization": "2.3.0", "Microsoft.AspNetCore.Authorization": "2.3.0",
"Microsoft.AspNetCore.SignalR.Common": "1.2.0", "Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0", "Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"System.IO.Pipelines": "8.0.0", "System.IO.Pipelines": "8.0.0",
"System.Reflection.Emit": "4.7.0", "System.Reflection.Emit": "4.7.0",
"System.Threading.Channels": "8.0.0" "System.Threading.Channels": "8.0.0"
@ -245,7 +205,7 @@
"Microsoft.AspNetCore.WebSockets/2.3.0": { "Microsoft.AspNetCore.WebSockets/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.0", "Microsoft.AspNetCore.Http.Extensions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0" "System.Net.WebSockets.WebSocketProtocol": "5.1.0"
} }
}, },
@ -541,24 +501,18 @@
} }
}, },
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {}, "Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
},
"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": { "Microsoft.Extensions.Caching.Memory/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "10.0.2", "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2", "Microsoft.Extensions.Options": "8.0.2",
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": { "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
@ -567,28 +521,14 @@
} }
} }
}, },
"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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection/8.0.1": { "Microsoft.Extensions.DependencyInjection/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2" "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
@ -597,11 +537,11 @@
} }
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.1024.46610"
} }
} }
}, },
@ -615,8 +555,8 @@
}, },
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
@ -625,27 +565,18 @@
} }
} }
}, },
"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": { "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
} }
}, },
"Microsoft.Extensions.Hosting.Abstractions/8.0.1": { "Microsoft.Extensions.Hosting.Abstractions/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2" "Microsoft.Extensions.Logging.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
@ -657,8 +588,8 @@
"Microsoft.Extensions.Logging/8.0.1": { "Microsoft.Extensions.Logging/8.0.1": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.1", "Microsoft.Extensions.DependencyInjection": "8.0.1",
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "10.0.2" "Microsoft.Extensions.Options": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.dll": { "lib/net8.0/Microsoft.Extensions.Logging.dll": {
@ -667,15 +598,14 @@
} }
} }
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
"System.Diagnostics.DiagnosticSource": "10.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.1024.46610"
} }
} }
}, },
@ -687,26 +617,19 @@
} }
} }
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"runtime": { "runtime": {
"lib/net8.0/Microsoft.Extensions.Options.dll": { "lib/net8.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "10.0.0.0", "assemblyVersion": "8.0.0.0",
"fileVersion": "10.0.225.61305" "fileVersion": "8.0.224.6711"
}
}
},
"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": { "Microsoft.IdentityModel.Abstractions/8.14.0": {
"runtime": { "runtime": {
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": { "lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
@ -763,7 +686,7 @@
}, },
"Microsoft.IdentityModel.Tokens/8.14.0": { "Microsoft.IdentityModel.Tokens/8.14.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.IdentityModel.Logging": "8.14.0" "Microsoft.IdentityModel.Logging": "8.14.0"
}, },
"runtime": { "runtime": {
@ -775,7 +698,7 @@
}, },
"Microsoft.Net.Http.Headers/2.3.0": { "Microsoft.Net.Http.Headers/2.3.0": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2", "Microsoft.Extensions.Primitives": "8.0.0",
"System.Buffers": "4.6.0" "System.Buffers": "4.6.0"
} }
}, },
@ -801,7 +724,7 @@
}, },
"MySqlConnector/2.3.5": { "MySqlConnector/2.3.5": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2" "Microsoft.Extensions.Logging.Abstractions": "8.0.2"
}, },
"runtime": { "runtime": {
"lib/net8.0/MySqlConnector.dll": { "lib/net8.0/MySqlConnector.dll": {
@ -841,47 +764,9 @@
} }
} }
}, },
"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": { "StackExchange.Redis/2.9.32": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.2", "Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Pipelines.Sockets.Unofficial": "2.2.8" "Pipelines.Sockets.Unofficial": "2.2.8"
}, },
"runtime": { "runtime": {
@ -1003,14 +888,6 @@
} }
} }
}, },
"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": { "System.IdentityModel.Tokens.Jwt/8.14.0": {
"dependencies": { "dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.14.0", "Microsoft.IdentityModel.JsonWebTokens": "8.14.0",
@ -1045,8 +922,7 @@
} }
}, },
"System.Text.Encodings.Web/8.0.0": {}, "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": { "libraries": {
@ -1076,27 +952,6 @@
"path": "humanizer.core/2.14.1", "path": "humanizer.core/2.14.1",
"hashPath": "humanizer.core.2.14.1.nupkg.sha512" "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": { "Microsoft.AspNetCore.Authentication.Abstractions/2.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1342,12 +1197,12 @@
"path": "microsoft.extensions.apidescription.server/6.0.5", "path": "microsoft.extensions.apidescription.server/6.0.5",
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512" "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
}, },
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==", "sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
"path": "microsoft.extensions.caching.abstractions/10.0.2", "path": "microsoft.extensions.caching.abstractions/8.0.0",
"hashPath": "microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
}, },
"Microsoft.Extensions.Caching.Memory/8.0.1": { "Microsoft.Extensions.Caching.Memory/8.0.1": {
"type": "package", "type": "package",
@ -1356,13 +1211,6 @@
"path": "microsoft.extensions.caching.memory/8.0.1", "path": "microsoft.extensions.caching.memory/8.0.1",
"hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512" "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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1377,12 +1225,12 @@
"path": "microsoft.extensions.dependencyinjection/8.0.1", "path": "microsoft.extensions.dependencyinjection/8.0.1",
"hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512"
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==", "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2", "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.DependencyModel/8.0.2": { "Microsoft.Extensions.DependencyModel/8.0.2": {
"type": "package", "type": "package",
@ -1398,20 +1246,6 @@
"path": "microsoft.extensions.diagnostics.abstractions/8.0.1", "path": "microsoft.extensions.diagnostics.abstractions/8.0.1",
"hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512" "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": { "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1433,12 +1267,12 @@
"path": "microsoft.extensions.logging/8.0.1", "path": "microsoft.extensions.logging/8.0.1",
"hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512"
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==", "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
"path": "microsoft.extensions.logging.abstractions/10.0.2", "path": "microsoft.extensions.logging.abstractions/8.0.2",
"hashPath": "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.ObjectPool/8.0.11": { "Microsoft.Extensions.ObjectPool/8.0.11": {
"type": "package", "type": "package",
@ -1447,19 +1281,19 @@
"path": "microsoft.extensions.objectpool/8.0.11", "path": "microsoft.extensions.objectpool/8.0.11",
"hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512" "hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512"
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==", "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
"path": "microsoft.extensions.options/10.0.2", "path": "microsoft.extensions.options/8.0.2",
"hashPath": "microsoft.extensions.options.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512"
}, },
"Microsoft.Extensions.Primitives/10.0.2": { "Microsoft.Extensions.Primitives/8.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==", "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
"path": "microsoft.extensions.primitives/10.0.2", "path": "microsoft.extensions.primitives/8.0.0",
"hashPath": "microsoft.extensions.primitives.10.0.2.nupkg.sha512" "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
}, },
"Microsoft.IdentityModel.Abstractions/8.14.0": { "Microsoft.IdentityModel.Abstractions/8.14.0": {
"type": "package", "type": "package",
@ -1559,27 +1393,6 @@
"path": "pomelo.entityframeworkcore.mysql/8.0.3", "path": "pomelo.entityframeworkcore.mysql/8.0.3",
"hashPath": "pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512" "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": { "StackExchange.Redis/2.9.32": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1678,13 +1491,6 @@
"path": "system.composition.typedparts/6.0.0", "path": "system.composition.typedparts/6.0.0",
"hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512" "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": { "System.IdentityModel.Tokens.Jwt/8.14.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -1747,13 +1553,6 @@
"sha512": "sha512-CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==", "sha512": "sha512-CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==",
"path": "system.threading.channels/8.0.0", "path": "system.threading.channels/8.0.0",
"hashPath": "system.threading.channels.8.0.0.nupkg.sha512" "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"
} }
} }
} }

View File

@ -14,17 +14,7 @@
"RefreshTokenDays": 30 "RefreshTokenDays": 30
}, },
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Server=192.168.5.100;Port=3306;Database=IM;User=product;Password=12345678;", "DefaultConnection": "Server=frp-era.com;Port=26582;Database=IM;User=product;Password=12345678;",
"Redis": "192.168.5.100:6379" "Redis": "192.168.5.100:6379"
},
"RabbitMQOptions": {
"Host": "192.168.5.100",
"Port": 5672,
"Username": "test",
"Password": "123456"
},
"FileUploadOptions": {
"DefaultStorage": "Local",
"ChunkSize": 5000000,
} }
} }

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("IMTest")] [assembly: System.Reflection.AssemblyCompanyAttribute("IMTest")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2ecaa28091b41de707825db3628d380b62fa727f")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1df3a0f30e469671b3e81d88574871d99c98af1a")]
[assembly: System.Reflection.AssemblyProductAttribute("IMTest")] [assembly: System.Reflection.AssemblyProductAttribute("IMTest")]
[assembly: System.Reflection.AssemblyTitleAttribute("IMTest")] [assembly: System.Reflection.AssemblyTitleAttribute("IMTest")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
ed4980dfc7aff253176b260ed9015f9a80b52e92cbf3095eff3ed06865ea6e0d 9546071857f1b0fa09bedf887ca476b7ecfa579752230651321c2a145e579c92

View File

@ -1,5 +1,7 @@
is_global = true is_global = true
build_property.TargetFramework = net8.0 build_property.TargetFramework = net8.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v8.0
build_property.TargetPlatformMinVersion = build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb = build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids = build_property.ProjectTypeGuids =

View File

@ -1,9 +1,9 @@
// <auto-generated/> // <auto-generated/>
global using global::System; global using System;
global using global::System.Collections.Generic; global using System.Collections.Generic;
global using global::System.IO; global using System.IO;
global using global::System.Linq; global using System.Linq;
global using global::System.Net.Http; global using System.Net.Http;
global using global::System.Threading; global using System.Threading;
global using global::System.Threading.Tasks; global using System.Threading.Tasks;
global using global::Xunit; global using Xunit;

View File

@ -1 +1 @@
a18d4d5688b125e6729fd465f09e267a2a7532eadaaca930389969ac369409ce b97252705aa63c43e1310042fe4fd7115206f72ef0f55d39109c2b849fe2a37e

View File

@ -140,15 +140,3 @@ 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.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\IMTest.genruntimeconfig.cache
C:\Users\nanxun\Documents\IM\backend\IMTest\obj\Debug\net8.0\ref\IMTest.dll 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

View File

@ -49,7 +49,7 @@
"auditLevel": "low", "auditLevel": "low",
"auditMode": "direct" "auditMode": "direct"
}, },
"SdkAnalysisLevel": "9.0.300" "SdkAnalysisLevel": "10.0.100"
}, },
"frameworks": { "frameworks": {
"net8.0": { "net8.0": {
@ -96,7 +96,7 @@
"privateAssets": "all" "privateAssets": "all"
} }
}, },
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json" "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.102/PortableRuntimeIdentifierGraph.json"
} }
} }
}, },
@ -141,7 +141,7 @@
"auditLevel": "low", "auditLevel": "low",
"auditMode": "direct" "auditMode": "direct"
}, },
"SdkAnalysisLevel": "9.0.300" "SdkAnalysisLevel": "10.0.100"
}, },
"frameworks": { "frameworks": {
"net8.0": { "net8.0": {
@ -179,10 +179,6 @@
"target": "Package", "target": "Package",
"version": "[8.0.21, )" "version": "[8.0.21, )"
}, },
"Microsoft.Extensions.Caching.StackExchangeRedis": {
"target": "Package",
"version": "[10.0.2, )"
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": { "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
"target": "Package", "target": "Package",
"version": "[1.22.1, )" "version": "[1.22.1, )"
@ -195,14 +191,6 @@
"target": "Package", "target": "Package",
"version": "[8.0.3, )" "version": "[8.0.3, )"
}, },
"RedLock.net": {
"target": "Package",
"version": "[2.3.2, )"
},
"SixLabors.ImageSharp": {
"target": "Package",
"version": "[3.1.12, )"
},
"StackExchange.Redis": { "StackExchange.Redis": {
"target": "Package", "target": "Package",
"version": "[2.9.32, )" "version": "[2.9.32, )"
@ -235,7 +223,7 @@
"privateAssets": "all" "privateAssets": "all"
} }
}, },
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json" "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.102/PortableRuntimeIdentifierGraph.json"
} }
} }
} }

View File

@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot> <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> <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\nanxun\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle> <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.2</NuGetToolVersion> <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\nanxun\.nuget\packages\" /> <SourceRoot Include="C:\Users\nanxun\.nuget\packages\" />

View File

@ -2,8 +2,8 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> <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)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\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.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\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.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.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.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)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')" /> <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')" />

View File

@ -491,17 +491,6 @@
} }
} }
}, },
"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": { "Microsoft.CodeCoverage/17.8.0": {
"type": "package", "type": "package",
"compile": { "compile": {
@ -610,10 +599,10 @@
"buildMultiTargeting/_._": {} "buildMultiTargeting/_._": {}
} }
}, },
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"compile": { "compile": {
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": {
@ -626,7 +615,7 @@
} }
}, },
"build": { "build": {
"buildTransitive/net8.0/_._": {} "buildTransitive/net6.0/_._": {}
} }
}, },
"Microsoft.Extensions.Caching.Memory/8.0.1": { "Microsoft.Extensions.Caching.Memory/8.0.1": {
@ -652,25 +641,6 @@
"buildTransitive/net6.0/_._": {} "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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -709,7 +679,7 @@
"buildTransitive/net6.0/_._": {} "buildTransitive/net6.0/_._": {}
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"type": "package", "type": "package",
"compile": { "compile": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
@ -722,7 +692,7 @@
} }
}, },
"build": { "build": {
"buildTransitive/net8.0/_._": {} "buildTransitive/net6.0/_._": {}
} }
}, },
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": {
@ -840,11 +810,10 @@
"buildTransitive/net6.0/_._": {} "buildTransitive/net6.0/_._": {}
} }
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
"System.Diagnostics.DiagnosticSource": "10.0.2"
}, },
"compile": { "compile": {
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
@ -857,7 +826,7 @@
} }
}, },
"build": { "build": {
"buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
} }
}, },
"Microsoft.Extensions.ObjectPool/8.0.11": { "Microsoft.Extensions.ObjectPool/8.0.11": {
@ -873,11 +842,11 @@
} }
} }
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "10.0.2" "Microsoft.Extensions.Primitives": "8.0.0"
}, },
"compile": { "compile": {
"lib/net8.0/Microsoft.Extensions.Options.dll": { "lib/net8.0/Microsoft.Extensions.Options.dll": {
@ -890,10 +859,10 @@
} }
}, },
"build": { "build": {
"buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} "buildTransitive/net6.0/Microsoft.Extensions.Options.targets": {}
} }
}, },
"Microsoft.Extensions.Primitives/10.0.2": { "Microsoft.Extensions.Primitives/8.0.0": {
"type": "package", "type": "package",
"compile": { "compile": {
"lib/net8.0/Microsoft.Extensions.Primitives.dll": { "lib/net8.0/Microsoft.Extensions.Primitives.dll": {
@ -906,7 +875,7 @@
} }
}, },
"build": { "build": {
"buildTransitive/net8.0/_._": {} "buildTransitive/net6.0/_._": {}
} }
}, },
"Microsoft.IdentityModel.Abstractions/8.14.0": { "Microsoft.IdentityModel.Abstractions/8.14.0": {
@ -1491,23 +1460,6 @@
} }
} }
}, },
"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": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"runtimeTargets": { "runtimeTargets": {
@ -1679,22 +1631,6 @@
} }
} }
}, },
"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": { "StackExchange.Redis/2.9.32": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -1862,20 +1798,24 @@
} }
} }
}, },
"System.Diagnostics.DiagnosticSource/10.0.2": { "System.Diagnostics.DiagnosticSource/4.3.0": {
"type": "package", "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": { "compile": {
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { "lib/netstandard1.3/_._": {
"related": ".xml" "related": ".xml"
} }
}, },
"runtime": { "runtime": {
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {
"related": ".xml" "related": ".xml"
} }
},
"build": {
"buildTransitive/net8.0/_._": {}
} }
}, },
"System.Diagnostics.EventLog/6.0.0": { "System.Diagnostics.EventLog/6.0.0": {
@ -3038,12 +2978,9 @@
"MassTransit.RabbitMQ": "8.5.5", "MassTransit.RabbitMQ": "8.5.5",
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21", "Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.21",
"Microsoft.AspNetCore.SignalR": "1.2.0", "Microsoft.AspNetCore.SignalR": "1.2.0",
"Microsoft.Extensions.Caching.StackExchangeRedis": "10.0.2",
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1", "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.22.1",
"Newtonsoft.Json": "13.0.4", "Newtonsoft.Json": "13.0.4",
"Pomelo.EntityFrameworkCore.MySql": "8.0.3", "Pomelo.EntityFrameworkCore.MySql": "8.0.3",
"RedLock.net": "2.3.2",
"SixLabors.ImageSharp": "3.1.12",
"StackExchange.Redis": "2.9.32", "StackExchange.Redis": "2.9.32",
"Swashbuckle.AspNetCore": "6.6.2", "Swashbuckle.AspNetCore": "6.6.2",
"System.IdentityModel.Tokens.Jwt": "8.14.0" "System.IdentityModel.Tokens.Jwt": "8.14.0"
@ -3505,30 +3442,6 @@
"microsoft.aspnetcore.webutilities.nuspec" "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": { "Microsoft.CodeCoverage/17.8.0": {
"sha512": "KC8SXWbGIdoFVdlxKk9WHccm0llm9HypcHMLUUFabRiTS3SO2fQXNZfdiF3qkEdTJhbRrxhdRxjL4jbtwPq4Ew==", "sha512": "KC8SXWbGIdoFVdlxKk9WHccm0llm9HypcHMLUUFabRiTS3SO2fQXNZfdiF3qkEdTJhbRrxhdRxjL4jbtwPq4Ew==",
"type": "package", "type": "package",
@ -3971,31 +3884,32 @@
"tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll" "tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll"
] ]
}, },
"Microsoft.Extensions.Caching.Abstractions/10.0.2": { "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
"sha512": "WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==", "sha512": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
"type": "package", "type": "package",
"path": "microsoft.extensions.caching.abstractions/10.0.2", "path": "microsoft.extensions.caching.abstractions/8.0.0",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "Icon.png",
"LICENSE.TXT",
"PACKAGE.md", "PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT", "THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets",
"buildTransitive/net462/_._", "buildTransitive/net462/_._",
"buildTransitive/net8.0/_._", "buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", "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.dll",
"lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", "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.dll",
"lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml", "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.dll",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml",
"microsoft.extensions.caching.abstractions.10.0.2.nupkg.sha512", "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512",
"microsoft.extensions.caching.abstractions.nuspec", "microsoft.extensions.caching.abstractions.nuspec",
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
@ -4030,26 +3944,6 @@
"useSharedDesignerContext.txt" "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": { "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
"sha512": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", "sha512": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
"type": "package", "type": "package",
@ -4112,33 +4006,34 @@
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"sha512": "zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==", "sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
"type": "package", "type": "package",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2", "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "Icon.png",
"LICENSE.TXT",
"PACKAGE.md", "PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT", "THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
"buildTransitive/net462/_._", "buildTransitive/net462/_._",
"buildTransitive/net8.0/_._", "buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", "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.dll",
"lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "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.dll",
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "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.dll",
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512", "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
"microsoft.extensions.dependencyinjection.abstractions.nuspec", "microsoft.extensions.dependencyinjection.abstractions.nuspec",
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
@ -4302,14 +4197,15 @@
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
}, },
"Microsoft.Extensions.Logging.Abstractions/10.0.2": { "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"sha512": "RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==", "sha512": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
"type": "package", "type": "package",
"path": "microsoft.extensions.logging.abstractions/10.0.2", "path": "microsoft.extensions.logging.abstractions/8.0.2",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "Icon.png",
"LICENSE.TXT",
"PACKAGE.md", "PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT", "THIRD-PARTY-NOTICES.TXT",
"analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll",
@ -4356,20 +4252,20 @@
"analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
"buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/netstandard2.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.dll",
"lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", "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.dll",
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", "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.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
"microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512", "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
"microsoft.extensions.logging.abstractions.nuspec", "microsoft.extensions.logging.abstractions.nuspec",
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
@ -4393,14 +4289,15 @@
"microsoft.extensions.objectpool.nuspec" "microsoft.extensions.objectpool.nuspec"
] ]
}, },
"Microsoft.Extensions.Options/10.0.2": { "Microsoft.Extensions.Options/8.0.2": {
"sha512": "1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==", "sha512": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
"type": "package", "type": "package",
"path": "microsoft.extensions.options/10.0.2", "path": "microsoft.extensions.options/8.0.2",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "Icon.png",
"LICENSE.TXT",
"PACKAGE.md", "PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT", "THIRD-PARTY-NOTICES.TXT",
"analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll",
@ -4419,51 +4316,52 @@
"analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll",
"buildTransitive/net461/Microsoft.Extensions.Options.targets", "buildTransitive/net461/Microsoft.Extensions.Options.targets",
"buildTransitive/net462/Microsoft.Extensions.Options.targets", "buildTransitive/net462/Microsoft.Extensions.Options.targets",
"buildTransitive/net8.0/Microsoft.Extensions.Options.targets", "buildTransitive/net6.0/Microsoft.Extensions.Options.targets",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets",
"buildTransitive/netstandard2.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.dll",
"lib/net462/Microsoft.Extensions.Options.xml", "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.dll",
"lib/net8.0/Microsoft.Extensions.Options.xml", "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.dll",
"lib/netstandard2.0/Microsoft.Extensions.Options.xml", "lib/netstandard2.0/Microsoft.Extensions.Options.xml",
"lib/netstandard2.1/Microsoft.Extensions.Options.dll", "lib/netstandard2.1/Microsoft.Extensions.Options.dll",
"lib/netstandard2.1/Microsoft.Extensions.Options.xml", "lib/netstandard2.1/Microsoft.Extensions.Options.xml",
"microsoft.extensions.options.10.0.2.nupkg.sha512", "microsoft.extensions.options.8.0.2.nupkg.sha512",
"microsoft.extensions.options.nuspec", "microsoft.extensions.options.nuspec",
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
}, },
"Microsoft.Extensions.Primitives/10.0.2": { "Microsoft.Extensions.Primitives/8.0.0": {
"sha512": "QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==", "sha512": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
"type": "package", "type": "package",
"path": "microsoft.extensions.primitives/10.0.2", "path": "microsoft.extensions.primitives/8.0.0",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "Icon.png",
"LICENSE.TXT",
"PACKAGE.md", "PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT", "THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/Microsoft.Extensions.Primitives.targets", "buildTransitive/net461/Microsoft.Extensions.Primitives.targets",
"buildTransitive/net462/_._", "buildTransitive/net462/_._",
"buildTransitive/net8.0/_._", "buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", "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.dll",
"lib/net462/Microsoft.Extensions.Primitives.xml", "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.dll",
"lib/net8.0/Microsoft.Extensions.Primitives.xml", "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.dll",
"lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml",
"microsoft.extensions.primitives.10.0.2.nupkg.sha512", "microsoft.extensions.primitives.8.0.0.nupkg.sha512",
"microsoft.extensions.primitives.nuspec", "microsoft.extensions.primitives.nuspec",
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
@ -5138,24 +5036,6 @@
"rabbitmq.client.nuspec" "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": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", "sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==",
"type": "package", "type": "package",
@ -5380,22 +5260,6 @@
"runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so" "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": { "StackExchange.Redis/2.9.32": {
"sha512": "j5Rjbf7gWz5izrn0UWQy9RlQY4cQDPkwJfVqATnVsOa/+zzJrps12LOgacMsDl/Vit2f01cDiDkG/Rst8v2iGw==", "sha512": "j5Rjbf7gWz5izrn0UWQy9RlQY4cQDPkwJfVqATnVsOa/+zzJrps12LOgacMsDl/Vit2f01cDiDkG/Rst8v2iGw==",
"type": "package", "type": "package",
@ -5839,32 +5703,25 @@
"system.diagnostics.debug.nuspec" "system.diagnostics.debug.nuspec"
] ]
}, },
"System.Diagnostics.DiagnosticSource/10.0.2": { "System.Diagnostics.DiagnosticSource/4.3.0": {
"sha512": "lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==", "sha512": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
"type": "package", "type": "package",
"path": "system.diagnostics.diagnosticsource/10.0.2", "path": "system.diagnostics.diagnosticsource/4.3.0",
"files": [ "files": [
".nupkg.metadata", ".nupkg.metadata",
".signature.p7s", ".signature.p7s",
"Icon.png", "ThirdPartyNotices.txt",
"THIRD-PARTY-NOTICES.TXT", "dotnet_library_license.txt",
"buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", "lib/net46/System.Diagnostics.DiagnosticSource.dll",
"buildTransitive/net462/_._", "lib/net46/System.Diagnostics.DiagnosticSource.xml",
"buildTransitive/net8.0/_._", "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll",
"buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml",
"lib/net10.0/System.Diagnostics.DiagnosticSource.dll", "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll",
"lib/net10.0/System.Diagnostics.DiagnosticSource.xml", "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml",
"lib/net462/System.Diagnostics.DiagnosticSource.dll", "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll",
"lib/net462/System.Diagnostics.DiagnosticSource.xml", "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml",
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll", "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512",
"lib/net8.0/System.Diagnostics.DiagnosticSource.xml", "system.diagnostics.diagnosticsource.nuspec"
"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": { "System.Diagnostics.EventLog/6.0.0": {
@ -8948,7 +8805,7 @@
"auditLevel": "low", "auditLevel": "low",
"auditMode": "direct" "auditMode": "direct"
}, },
"SdkAnalysisLevel": "9.0.300" "SdkAnalysisLevel": "10.0.100"
}, },
"frameworks": { "frameworks": {
"net8.0": { "net8.0": {
@ -8995,8 +8852,16 @@
"privateAssets": "all" "privateAssets": "all"
} }
}, },
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json" "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.102/PortableRuntimeIdentifierGraph.json"
} }
} }
},
"logs": [
{
"code": "Undefined",
"level": "Warning",
"warningLevel": 1,
"message": "读取缓存文件 C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\obj\\project.nuget.cache 时遇到问题: '<' is an invalid start of a property name. Expected a '\"'. Path: $ | LineNumber: 2 | BytePositionInLine: 0."
} }
]
} }

View File

@ -1,6 +1,6 @@
{ {
"version": 2, "version": 2,
"dgSpecHash": "E2DnflEnEuk=", "dgSpecHash": "j7OjEXb1ZGE=",
"success": true, "success": true,
"projectFilePath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj", "projectFilePath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj",
"expectedPackageFiles": [ "expectedPackageFiles": [
@ -32,7 +32,6 @@
"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.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.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.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.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.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", "C:\\Users\\nanxun\\.nuget\\packages\\microsoft.entityframeworkcore\\8.0.22\\microsoft.entityframeworkcore.8.0.22.nupkg.sha512",
@ -41,22 +40,21 @@
"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.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.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.apidescription.server\\6.0.5\\microsoft.extensions.apidescription.server.6.0.5.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.abstractions\\8.0.0\\microsoft.extensions.caching.abstractions.8.0.0.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.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.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\\8.0.1\\microsoft.extensions.dependencyinjection.8.0.1.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.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.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.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\\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.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.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.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\\8.0.1\\microsoft.extensions.logging.8.0.1.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.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.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.objectpool\\8.0.11\\microsoft.extensions.objectpool.8.0.11.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.options\\8.0.2\\microsoft.extensions.options.8.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.extensions.primitives\\8.0.0\\microsoft.extensions.primitives.8.0.0.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.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.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", "C:\\Users\\nanxun\\.nuget\\packages\\microsoft.identitymodel.logging\\8.14.0\\microsoft.identitymodel.logging.8.14.0.nupkg.sha512",
@ -80,7 +78,6 @@
"C:\\Users\\nanxun\\.nuget\\packages\\pipelines.sockets.unofficial\\2.2.8\\pipelines.sockets.unofficial.2.2.8.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\\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\\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.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.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", "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",
@ -97,7 +94,6 @@
"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.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.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\\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\\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\\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", "C:\\Users\\nanxun\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.6.2\\swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512",
@ -109,7 +105,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.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.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.debug\\4.3.0\\system.diagnostics.debug.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.diagnosticsource\\4.3.0\\system.diagnostics.diagnosticsource.4.3.0.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.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.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", "C:\\Users\\nanxun\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512",
@ -173,5 +169,15 @@
"C:\\Users\\nanxun\\.nuget\\packages\\xunit.extensibility.execution\\2.5.3\\xunit.extensibility.execution.2.5.3.nupkg.sha512", "C:\\Users\\nanxun\\.nuget\\packages\\xunit.extensibility.execution\\2.5.3\\xunit.extensibility.execution.2.5.3.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\xunit.runner.visualstudio\\2.5.3\\xunit.runner.visualstudio.2.5.3.nupkg.sha512" "C:\\Users\\nanxun\\.nuget\\packages\\xunit.runner.visualstudio\\2.5.3\\xunit.runner.visualstudio.2.5.3.nupkg.sha512"
], ],
"logs": [] "logs": [
{
"code": "Undefined",
"level": "Warning",
"message": "读取缓存文件 C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\obj\\project.nuget.cache 时遇到问题: '<' is an invalid start of a property name. Expected a '\"'. Path: $ | LineNumber: 2 | BytePositionInLine: 0.",
"projectPath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj",
"warningLevel": 1,
"filePath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj",
"targetGraphs": []
}
]
} }

View File

@ -1,4 +1,3 @@
bin/ bin/
obj/ obj/
.vs/ .vs/
uploads/

View File

@ -1,23 +1,13 @@
using IM_API.Domain.Events; using IM_API.Domain.Events;
using IM_API.Interface.Services;
using MassTransit; using MassTransit;
namespace IM_API.Application.EventHandlers.FriendAddHandler namespace IM_API.Application.EventHandlers.FriendAddHandler
{ {
public class FriendAddConversationHandler : IConsumer<FriendAddEvent> public class FriendAddConversationHandler : IConsumer<FriendAddEvent>
{ {
private readonly IConversationService _cService; public Task Consume(ConsumeContext<FriendAddEvent> context)
public FriendAddConversationHandler(IConversationService cService)
{ {
_cService = cService; throw new NotImplementedException();
}
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);
} }
} }
} }

View File

@ -1,29 +0,0 @@
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);
}
}
}

View File

@ -1,37 +1,31 @@
using IM_API.Domain.Events; 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.Models;
using MassTransit; using MassTransit;
using Microsoft.AspNetCore.SignalR;
namespace IM_API.Application.EventHandlers.FriendAddHandler namespace IM_API.Application.EventHandlers.FriendAddHandler
{ {
public class FriendAddSignalRHandler : IConsumer<FriendAddEvent> public class FriendAddSignalRHandler : IConsumer<FriendAddEvent>
{ {
private readonly IHubContext<ChatHub> _chathub; private readonly ImContext _context;
public FriendAddSignalRHandler(IHubContext<ChatHub> chathub) public FriendAddSignalRHandler(ImContext context)
{ {
_chathub = chathub; _context = context;
} }
public async Task Consume(ConsumeContext<FriendAddEvent> context) public Task Consume(ConsumeContext<FriendAddEvent> context)
{ {
throw new NotImplementedException();
var @event = context.Message; var @event = context.Message;
var usersList = new List<string> {
@event.RequestUserId.ToString(), @event.ResponseUserId.ToString() var RequestfriendShip = new Friend()
};
var res = new HubResponse<MessageBaseDto>("Event", new MessageBaseDto()
{ {
ChatType = ChatType.PRIVATE, Avatar = @event.ResponseUser.Avatar,
Content = "您有新的好友关系已添加", UserId = @event.RequestUser.Id,
//MsgId = @event.EventId.ToString(), RemarkName = @event.RequestInfo.NickName,
ReceiverId = @event.ResponseUserId, Created = @event.RequestInfo.Created,
SenderId = @event.RequestUserId,
TimeStamp = DateTime.Now
}); };
await _chathub.Clients.Users(usersList).SendAsync("ReceiveMessage", res);
} }
} }
} }

View File

@ -1,24 +0,0 @@
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);
}
}
}
}

View File

@ -1,34 +0,0 @@
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);
}
}
}

View File

@ -1,26 +0,0 @@
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);
}
}
}

View File

@ -1,21 +0,0 @@
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);
}
}
}

View File

@ -1,22 +0,0 @@
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);
}
}
}

View File

@ -1,45 +0,0 @@
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));
}
}
}

View File

@ -1,17 +0,0 @@
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)
{
}
}
}

View File

@ -1,31 +0,0 @@
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
});
}
}
}
}

View File

@ -1,31 +0,0 @@
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
});
}
}
}
}

View File

@ -1,29 +0,0 @@
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);
}
}
}

View File

@ -17,49 +17,46 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
{ {
private readonly IConversationService _conversationService; private readonly IConversationService _conversationService;
private readonly ILogger<ConversationEventHandler> _logger; private readonly ILogger<ConversationEventHandler> _logger;
private readonly IUserService _userSerivce; private readonly ImContext _context;
private readonly IGroupService _groupService; private readonly IMapper _mapper;
public ConversationEventHandler( public ConversationEventHandler(
IConversationService conversationService, IConversationService conversationService,
ILogger<ConversationEventHandler> logger, ILogger<ConversationEventHandler> logger,
IUserService userService, ImContext imContext,
IGroupService groupService IMapper mapper
) )
{ {
_conversationService = conversationService; _conversationService = conversationService;
_logger = logger; _logger = logger;
_userSerivce = userService; _context = imContext;
_groupService = groupService; _mapper = mapper;
} }
public async Task Consume(ConsumeContext<MessageCreatedEvent> context) public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
{ {
var @event = context.Message; 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
});
}
if (@event.ChatType == ChatType.PRIVATE)
{
Conversation? userAConversation = await _context.Conversations.FirstOrDefaultAsync(
x => x.UserId == @event.MsgSenderId && x.TargetId == @event.MsgRecipientId
);
Conversation? userBConversation = await _context.Conversations.FirstOrDefaultAsync(
x => x.UserId == @event.MsgRecipientId && x.TargetId == @event.MsgSenderId
);
if (userAConversation is null || userBConversation is null)
{
_logger.LogError("消息事件更新会话信息失败:{@event}", @event);
}
userAConversation.LastMessage = @event.MessageContent;
userAConversation.LastReadMessageId = @event.MessageId;
userAConversation.LastMessageTime = @event.MessageCreated;
userBConversation.LastMessage = @event.MessageContent;
userBConversation.UnreadCount += 1;
userBConversation.LastMessageTime = @event.MessageCreated;
_context.UpdateRange(userAConversation, userBConversation);
await _context.SaveChangesAsync();
}
} }
} }

View File

@ -1,26 +0,0 @@
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);
}
}
}

View File

@ -3,10 +3,8 @@ using IM_API.Application.Interfaces;
using IM_API.Domain.Events; using IM_API.Domain.Events;
using IM_API.Dtos; using IM_API.Dtos;
using IM_API.Hubs; using IM_API.Hubs;
using IM_API.Interface.Services;
using IM_API.Models; using IM_API.Models;
using IM_API.Tools; using IM_API.Tools;
using IM_API.VOs.Message;
using MassTransit; using MassTransit;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
@ -16,38 +14,29 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
{ {
private readonly IHubContext<ChatHub> _hub; private readonly IHubContext<ChatHub> _hub;
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IUserService _userService; public SignalREventHandler(IHubContext<ChatHub> hub, IMapper mapper)
public SignalREventHandler(IHubContext<ChatHub> hub, IMapper mapper,
IUserService userService)
{ {
_hub = hub; _hub = hub;
_mapper = mapper; _mapper = mapper;
_userService = userService;
} }
public async Task Consume(ConsumeContext<MessageCreatedEvent> context) public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
{ {
Console.ForegroundColor = ConsoleColor.Red;
var @event = context.Message; var @event = context.Message;
try if (@event.ChatType == Models.ChatType.PRIVATE)
{ {
var entity = _mapper.Map<Message>(@event); MessageBaseDto messageBaseDto = new MessageBaseDto
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); MsgId = @event.MessageId.ToString(),
} ChatType = @event.ChatType.ToString(),
await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse<MessageBaseVo>("Event", messageBaseVo)); Content = @event.MessageContent,
} GroupMemberId = null,
catch (Exception ex) ReceiverId = @event.MsgRecipientId,
{ SenderId = @event.MsgSenderId,
Console.WriteLine($"[SignalR] 发送失败: {ex.Message}"); TimeStamp = @event.MessageCreated,
Console.ResetColor(); Type = @event.MessageMsgType.ToString()
throw; };
await _hub.Clients.Users(@event.MsgRecipientId.ToString()).SendAsync("ReceiveMessage", messageBaseDto);
} }
} }
} }

View File

@ -1,37 +0,0 @@
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);
}
}
}

View File

@ -1,21 +0,0 @@
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);
}
}
}

View File

@ -1,44 +1,20 @@
using AutoMapper; using IM_API.Application.EventHandlers.FriendAddHandler;
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.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 MassTransit;
using MySqlConnector;
namespace IM_API.Configs namespace IM_API.Configs
{ {
public static class MQConfig public static class MQConfig
{ {
public static IServiceCollection AddRabbitMQ(this IServiceCollection services, RabbitMQOptions options) public static IServiceCollection AddRabbitMQ(this IServiceCollection services, RabbitMqOptions options)
{ {
services.AddMassTransit(x => services.AddMassTransit(x =>
{ {
x.AddConsumer<ConversationEventHandler>(); x.AddConsumer<ConversationEventHandler>();
x.AddConsumer<SignalREventHandler>(); x.AddConsumer<SignalREventHandler>();
x.AddConsumer<FriendAddDBHandler>();
x.AddConsumer<FriendAddSignalRHandler>();
x.AddConsumer<RequestFriendSignalRHandler>();
x.AddConsumer<FriendAddConversationHandler>(); x.AddConsumer<FriendAddConversationHandler>();
x.AddConsumer<MessageCreatedDbHandler>(); x.AddConsumer<FriendAddSignalRHandler>();
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) => x.UsingRabbitMq((ctx,cfg) =>
{ {
cfg.Host(options.Host, "/", h => cfg.Host(options.Host, "/", h =>
@ -46,15 +22,6 @@ namespace IM_API.Configs
h.Username(options.Username); h.Username(options.Username);
h.Password(options.Password); 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);
}); });
}); });
@ -63,5 +30,11 @@ namespace IM_API.Configs
} }
} }
public class RabbitMqOptions
{
public string Host { get; set; }
public int Port { get; set; }
public string Username { get; set; }
public string Password { get;set; }
}
} }

View File

@ -1,18 +1,7 @@
using AutoMapper; using AutoMapper;
using IM_API.Domain.Events; using IM_API.Domain.Events;
using IM_API.Dtos; 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;
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 namespace IM_API.Configs
{ {
@ -39,7 +28,6 @@ namespace IM_API.Configs
//好友信息模型转换 //好友信息模型转换
CreateMap<Friend, FriendInfoDto>() CreateMap<Friend, FriendInfoDto>()
.ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src.FriendNavigation)) .ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src.FriendNavigation))
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
; ;
//好友请求通过后新增好友关系 //好友请求通过后新增好友关系
CreateMap<FriendRequestDto, Friend>() CreateMap<FriendRequestDto, Friend>()
@ -47,46 +35,39 @@ namespace IM_API.Configs
.ForMember(dest => dest.FriendId , opt => opt.MapFrom(src => src.ToUserId)) .ForMember(dest => dest.FriendId , opt => opt.MapFrom(src => src.ToUserId))
.ForMember(dest => dest.StatusEnum , opt =>opt.MapFrom(src => FriendStatus.Pending)) .ForMember(dest => dest.StatusEnum , opt =>opt.MapFrom(src => FriendStatus.Pending))
.ForMember(dest => dest.RemarkName , opt => opt.MapFrom(src => src.RemarkName)) .ForMember(dest => dest.RemarkName , opt => opt.MapFrom(src => src.RemarkName))
.ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.Now)) .ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.UtcNow))
; ;
//发起好友请求转换请求对象 //发起好友请求转换请求对象
CreateMap<FriendRequestDto, FriendRequest>() CreateMap<FriendRequestDto, FriendRequest>()
.ForMember(dest => dest.RequestUser , opt => opt.MapFrom(src => src.FromUserId)) .ForMember(dest => dest.RequestUser , opt => opt.MapFrom(src => src.FromUserId))
.ForMember(dest => dest.ResponseUser , opt => opt.MapFrom(src => src.ToUserId)) .ForMember(dest => dest.ResponseUser , opt => opt.MapFrom(src => src.ToUserId))
.ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.Now)) .ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.UtcNow))
.ForMember(dest => dest.StateEnum , opt => opt.MapFrom(src => FriendRequestState.Pending)) .ForMember(dest => dest.StateEnum , opt => opt.MapFrom(src => FriendRequestState.Pending))
.ForMember(dest => dest.Description , opt => opt.MapFrom(src => src.Description)) .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, MessageBaseVo>() CreateMap<Message, MessageBaseDto>()
.ForMember(dest => dest.Type , opt => opt.MapFrom(src => src.MsgTypeEnum)) .ForMember(dest => dest.Type , opt => opt.MapFrom(src => src.MsgTypeEnum.ToString()))
.ForMember(dest => dest.MsgId , opt => opt.MapFrom(src => src.ClientMsgId)) .ForMember(dest => dest.MsgId , opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.SenderId , opt => opt.MapFrom(src => src.Sender)) .ForMember(dest => dest.SenderId , opt => opt.MapFrom(src => src.Sender))
.ForMember(dest => dest.ChatType , opt => opt.MapFrom(src => src.ChatTypeEnum)) .ForMember(dest => dest.ChatType , opt => opt.MapFrom(src => src.ChatTypeEnum.ToString()))
.ForMember(dest => dest.ReceiverId, opt => opt.MapFrom(src => src.Recipient)) .ForMember(dest => dest.ReceiverId, opt => opt.MapFrom(src => src.Recipient))
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content)) .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
.ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => src.Created)) .ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => src.Created))
.ForMember(dest => dest.SequenceId, opt => opt.MapFrom(src => src.SequenceId)) .ForMember(dest => dest.GroupMemberId , opt => opt.MapFrom(src => src.GroupMemberId))
; ;
CreateMap<MessageBaseDto, Message>() CreateMap<MessageBaseDto, Message>()
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.SenderId)) .ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.SenderId))
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => src.ChatType)) .ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => Enum.Parse<ChatType>(src.ChatType,true)))
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.Type)) .ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => Enum.Parse<MessageMsgType>(src.Type,true)))
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.TimeStamp)) .ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.TimeStamp))
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content)) .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.ReceiverId)) .ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.ReceiverId))
.ForMember(dest => dest.StreamKey, opt => opt.Ignore() ) .ForMember(dest => dest.StreamKey, opt => opt.Ignore() )
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent)) .ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent))
.ForMember(dest => dest.GroupMemberId, opt => opt.MapFrom(src => src.GroupMemberId))
.ForMember(dest => dest.ChatType, opt => opt.Ignore()) .ForMember(dest => dest.ChatType, opt => opt.Ignore())
.ForMember(dest => dest.MsgType, opt => opt.Ignore()) .ForMember(dest => dest.MsgType, opt => opt.Ignore())
.ForMember(dest => dest.ClientMsgId, opt => opt.MapFrom(src => src.MsgId))
; ;
//会话对象深拷贝 //会话对象深拷贝
@ -105,116 +86,43 @@ namespace IM_API.Configs
.ForMember(dest => dest.MessageContent, opt => opt.MapFrom(src => src.Content)) .ForMember(dest => dest.MessageContent, opt => opt.MapFrom(src => src.Content))
.ForMember(dest => dest.State, opt => opt.MapFrom(src => src.StateEnum)) .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.StateEnum))
.ForMember(dest => dest.MessageCreated, opt => opt.MapFrom(src => src.Created)) .ForMember(dest => dest.MessageCreated, opt => opt.MapFrom(src => src.Created))
.ForMember(dest => dest.MessageId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.MsgRecipientId, opt => opt.MapFrom(src => src.Recipient)) .ForMember(dest => dest.MsgRecipientId, opt => opt.MapFrom(src => src.Recipient))
.ForMember(dest => dest.MsgSenderId, opt => opt.MapFrom(src => src.Sender)) .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)) .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>() CreateMap<MessageCreatedEvent, Conversation>()
//.ForMember(dest => dest.LastReadMessageId, opt => opt.MapFrom(src => src.MessageId)) .ForMember(dest => dest.LastReadMessageId, opt => opt.MapFrom(src => src.MessageId))
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.MessageContent)) .ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.MessageContent))
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatType)) .ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => (int)src.ChatType))
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.MsgSenderId)) .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.MsgSenderId))
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.MsgRecipientId)) .ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.MsgRecipientId))
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => 0)) .ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => 0))
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey)) .ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
.ForMember(dest => dest.LastMessageTime, opt => opt.MapFrom(src => DateTime.Now)) .ForMember(dest => dest.LastMessageTime, opt => opt.MapFrom(src => DateTime.UtcNow))
; ;
//创建会话对象 //创建会话对象
CreateMap<Conversation, ConversationVo>() CreateMap<Conversation, ConversationDto>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id)) .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.LastMessage)) .ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.LastMessage))
.ForMember(dest => dest.LastSequenceId, opt => opt.MapFrom(src => src.LastReadSequenceId)) .ForMember(dest => dest.LastReadMessage, opt => opt.MapFrom(src => src.LastReadMessage))
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatTypeEnum)) .ForMember(dest => dest.LastReadMessageId, opt => opt.MapFrom(src => src.LastReadMessageId))
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatType))
.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => src.LastMessageTime)) .ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => src.LastMessageTime))
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.TargetId)) .ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.TargetId))
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => src.UnreadCount)) .ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => src.UnreadCount))
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId)); .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId));
CreateMap<Friend, ConversationVo>() CreateMap<Friend, ConversationDto>()
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar)) .ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.Avatar))
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.RemarkName)); .ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.RemarkName));
CreateMap<Group, ConversationVo>() CreateMap<Group, ConversationDto>()
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.Avatar)) .ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.Avatar))
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.Name)); .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));
} }
} }
} }

View File

@ -1,8 +0,0 @@
namespace IM_API.Configs.Options
{
public class ConnectionOptions
{
public string DefaultConnection { get; set; }
public string Redis { get; set; }
}
}

View File

@ -1,8 +0,0 @@
namespace IM_API.Configs.Options
{
public class FileUploadOptions
{
public string DefaultStorage { get; set; }
public int ChunkSize { get; set; }
}
}

View File

@ -1,10 +0,0 @@
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; }
}
}

View File

@ -8,10 +8,6 @@ using IM_API.Services;
using IM_API.Tools; using IM_API.Tools;
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using RedLockNet;
using RedLockNet.SERedis;
using RedLockNet.SERedis.Configuration;
using StackExchange.Redis;
namespace IM_API.Configs namespace IM_API.Configs
{ {
@ -21,24 +17,14 @@ namespace IM_API.Configs
{ {
services.AddAutoMapper(typeof(MapperConfig)); services.AddAutoMapper(typeof(MapperConfig));
services.AddScoped<IAuthService, AuthService>(); services.AddTransient<IAuthService, AuthService>();
services.AddScoped<IUserService, UserService>(); services.AddTransient<IUserService, UserService>();
services.AddScoped<IFriendSerivce, FriendService>(); services.AddTransient<IFriendSerivce, FriendService>();
services.AddScoped<IMessageSevice, MessageService>(); services.AddTransient<IMessageSevice, MessageService>();
services.AddScoped<IConversationService, ConversationService>(); services.AddTransient<IConversationService, ConversationService>();
services.AddScoped<IGroupService, GroupService>(); services.AddScoped<IEventBus, InMemoryEventBus>();
services.AddScoped<ISequenceIdService, SequenceIdService>();
services.AddScoped<ICacheService, RedisCacheService>();
services.AddScoped<IStorageService, LocalStorageService>();
services.AddScoped<IUploadTaskService, UploadTaskService>();
services.AddSingleton<IJWTService, JWTService>(); 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; return services;
} }
public static IServiceCollection AddModelValidation(this IServiceCollection services, IConfiguration configuration) public static IServiceCollection AddModelValidation(this IServiceCollection services, IConfiguration configuration)
@ -54,7 +40,7 @@ namespace IM_API.Configs
Field = e.Key, Field = e.Key,
Message = e.Value.Errors.First().ErrorMessage Message = e.Value.Errors.First().ErrorMessage
}); });
Console.WriteLine(errors);
return new BadRequestObjectResult(new BaseResponse<object?>(CodeDefine.PARAMETER_ERROR.Code, errors.First().Message)); return new BadRequestObjectResult(new BaseResponse<object?>(CodeDefine.PARAMETER_ERROR.Code, errors.First().Message));
}; };
}); });

View File

@ -1,14 +1,10 @@
using AutoMapper; using AutoMapper;
using IM_API.Dtos; using IM_API.Dtos;
using IM_API.Dtos.Auth;
using IM_API.Dtos.User;
using IM_API.Interface.Services; using IM_API.Interface.Services;
using IM_API.Tools; using IM_API.Tools;
using IM_API.VOs.Auth;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace IM_API.Controllers namespace IM_API.Controllers
{ {
@ -40,20 +36,13 @@ namespace IM_API.Controllers
[HttpPost] [HttpPost]
public async Task<IActionResult> Login(LoginRequestDto dto) public async Task<IActionResult> Login(LoginRequestDto dto)
{ {
Stopwatch sw = Stopwatch.StartNew();
var user = await _authService.LoginAsync(dto); var user = await _authService.LoginAsync(dto);
_logger.LogInformation("服务耗时: {ms}ms", sw.ElapsedMilliseconds);
var userInfo = _mapper.Map<UserInfoDto>(user); var userInfo = _mapper.Map<UserInfoDto>(user);
_logger.LogInformation("序列化耗时: {ms}ms", sw.ElapsedMilliseconds);
//生成凭证 //生成凭证
(string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(user.Id,user.Username,"user"); (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); string refreshToken = await _refreshTokenService.CreateRefreshTokenAsync(user.Id);
_logger.LogInformation("RefreshToken生成耗时: {ms}ms", sw.ElapsedMilliseconds); var res = new BaseResponse<LoginDto>(new LoginDto(userInfo,token,refreshToken, expiresAt));
var res = new BaseResponse<LoginVo>(new LoginVo(userInfo,token,refreshToken, expiresAt));
_logger.LogInformation("总耗时: {ms}ms", sw.ElapsedMilliseconds);
return Ok(res); return Ok(res);
} }
[HttpPost] [HttpPost]
@ -64,18 +53,18 @@ namespace IM_API.Controllers
return Ok(res); return Ok(res);
} }
[HttpPost] [HttpPost]
[ProducesResponseType(typeof(BaseResponse<LoginVo>),StatusCodes.Status200OK)] [ProducesResponseType(typeof(BaseResponse<LoginDto>),StatusCodes.Status200OK)]
public async Task<IActionResult> Refresh(RefreshDto dto) public async Task<IActionResult> Refresh(RefreshDto dto)
{ {
(bool ok,int userId) = await _refreshTokenService.ValidateRefreshTokenAsync(dto.refreshToken); (bool ok,int userId) = await _refreshTokenService.ValidateRefreshTokenAsync(dto.refreshToken);
if (!ok) if (!ok)
{ {
var err = new BaseResponse<LoginVo>(CodeDefine.AUTH_FAILED); var err = new BaseResponse<LoginDto>(CodeDefine.AUTH_FAILED);
return Unauthorized(err); return Unauthorized(err);
} }
var userinfo = await _userService.GetUserInfoAsync(userId); var userinfo = await _userService.GetUserInfoAsync(userId);
(string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(userinfo.Id,userinfo.Username,"user"); (string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(userinfo.Id,userinfo.Username,"user");
var res = new BaseResponse<LoginVo>(new LoginVo(userinfo,token, dto.refreshToken, expiresAt)); var res = new BaseResponse<LoginDto>(new LoginDto(userinfo,token, dto.refreshToken, expiresAt));
return Ok(res); return Ok(res);
} }
} }

View File

@ -1,7 +1,6 @@
using IM_API.Dtos; using IM_API.Dtos;
using IM_API.Interface.Services; using IM_API.Interface.Services;
using IM_API.Models; using IM_API.Models;
using IM_API.VOs.Conversation;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -26,7 +25,7 @@ namespace IM_API.Controllers
{ {
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var list = await _conversationSerivice.GetConversationsAsync(int.Parse(userIdStr)); var list = await _conversationSerivice.GetConversationsAsync(int.Parse(userIdStr));
var res = new BaseResponse<List<ConversationVo>>(list); var res = new BaseResponse<List<ConversationDto>>(list);
return Ok(res); return Ok(res);
} }
[HttpGet] [HttpGet]
@ -34,7 +33,7 @@ namespace IM_API.Controllers
{ {
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var conversation = await _conversationSerivice.GetConversationByIdAsync(int.Parse(userIdStr), conversationId); var conversation = await _conversationSerivice.GetConversationByIdAsync(int.Parse(userIdStr), conversationId);
var res = new BaseResponse<ConversationVo>(conversation); var res = new BaseResponse<ConversationDto>(conversation);
return Ok(res); return Ok(res);
} }
[HttpPost] [HttpPost]

View File

@ -1,5 +1,4 @@
using IM_API.Dtos; using IM_API.Dtos;
using IM_API.Dtos.Friend;
using IM_API.Interface.Services; using IM_API.Interface.Services;
using IM_API.Models; using IM_API.Models;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -61,7 +60,7 @@ namespace IM_API.Controllers
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<IActionResult> HandleRequest( public async Task<IActionResult> HandleRequest(
[FromQuery]int id, [FromBody]FriendRequestHandleDto dto [FromRoute]int id, [FromBody]FriendRequestHandleDto dto
) )
{ {
await _friendService.HandleFriendRequestAsync(new HandleFriendRequestDto() await _friendService.HandleFriendRequestAsync(new HandleFriendRequestDto()

View File

@ -1,81 +0,0 @@
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));
}
}
}

View File

@ -1,11 +1,5 @@
using IM_API.Application.Interfaces; using IM_API.Dtos;
using IM_API.Domain.Events;
using IM_API.Dtos;
using IM_API.Dtos.Message;
using IM_API.Interface.Services; 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.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -21,44 +15,31 @@ namespace IM_API.Controllers
{ {
private readonly IMessageSevice _messageService; private readonly IMessageSevice _messageService;
private readonly ILogger<MessageController> _logger; private readonly ILogger<MessageController> _logger;
public MessageController(IMessageSevice messageService, public MessageController(IMessageSevice messageService, ILogger<MessageController> logger)
ILogger<MessageController> logger)
{ {
_messageService = messageService; _messageService = messageService;
_logger = logger; _logger = logger;
} }
[HttpPost] [HttpPost]
[ProducesResponseType(typeof(BaseResponse<MessageBaseVo>), StatusCodes.Status200OK)] public async Task<IActionResult> SendPrivateMessage(MessageBaseDto dto)
public async Task<IActionResult> SendMessage(MessageBaseDto dto)
{ {
var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier);
MessageBaseVo messageBaseVo = new MessageBaseVo(); await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, dto);
var handledMessage = await _messageService.HandleFileMessageContentAsync(dto); return Ok(new BaseResponse<object?>());
if(dto.ChatType == Models.ChatType.PRIVATE)
{
messageBaseVo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage);
} }
else [HttpPost]
public async Task<IActionResult> SendGroupMessage(MessageBaseDto dto)
{ {
messageBaseVo = await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage); var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier);
} await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, dto);
return Ok(new BaseResponse<object?>());
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] [HttpGet]
[ProducesResponseType(typeof(BaseResponse<List<MessageBaseVo>>), StatusCodes.Status200OK)] public async Task<IActionResult> GetMessageList([Required]int conversationId, int? msgId, int? pageSize)
public async Task<IActionResult> GetMessageList([FromQuery]MessageQueryDto dto)
{ {
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var msgList = await _messageService.GetMessagesAsync(int.Parse(userIdStr),dto); var msgList = await _messageService.GetMessagesAsync(int.Parse(userIdStr), conversationId, msgId, pageSize, false);
var res = new BaseResponse<List<MessageBaseVo>>(msgList); var res = new BaseResponse<List<MessageBaseDto>>(msgList);
return Ok(res); return Ok(res);
} }
} }

View File

@ -1,124 +0,0 @@
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));
}
}
}

View File

@ -1,11 +1,9 @@
using IM_API.Dtos; using IM_API.Dtos;
using IM_API.Dtos.User;
using IM_API.Interface.Services; using IM_API.Interface.Services;
using IM_API.Tools; using IM_API.Tools;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims; using System.Security.Claims;
@ -101,14 +99,5 @@ namespace IM_API.Controllers
await _userService.UpdateOlineStatusAsync(userId, dto.OnlineStatus); await _userService.UpdateOlineStatusAsync(userId, dto.OnlineStatus);
return Ok(new BaseResponse<object?>()); 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);
}
} }
} }

View File

@ -5,7 +5,7 @@ namespace IM_API.Domain.Events
public abstract record DomainEvent: IEvent public abstract record DomainEvent: IEvent
{ {
public Guid EventId { get; init; } = Guid.NewGuid(); public Guid EventId { get; init; } = Guid.NewGuid();
public DateTimeOffset OccurredAt { get; init; } = DateTime.Now; public DateTime OccurredAt { get; init; } = DateTime.UtcNow;
public long OperatorId { get; init; } public long OperatorId { get; init; }
public string AggregateId { get; init; } = ""; public string AggregateId { get; init; } = "";
public abstract string EventType { get; } public abstract string EventType { get; }

View File

@ -1,4 +1,4 @@
using IM_API.Dtos.Friend; using IM_API.Dtos;
namespace IM_API.Domain.Events namespace IM_API.Domain.Events
{ {
@ -8,18 +8,17 @@ namespace IM_API.Domain.Events
/// <summary> /// <summary>
/// 发起请求用户 /// 发起请求用户
/// </summary> /// </summary>
public int RequestUserId { get; init; } public UserInfoDto RequestUser { get; set; }
public string? requestUserRemarkname { get; init; }
/// <summary> /// <summary>
/// 接受请求用户 /// 接受请求用户
/// </summary> /// </summary>
public int ResponseUserId { get; init; } public UserInfoDto ResponseUser { get; set; }
public FriendRequestDto RequestInfo { get; init; } public FriendRequestResDto RequestInfo { get; set; }
/// <summary> /// <summary>
/// 好友关系创建时间 /// 好友关系创建时间
/// </summary> /// </summary>
public DateTimeOffset Created { get; init; } public DateTime Created { get; set; }
} }
} }

View File

@ -1,14 +0,0 @@
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; }
}
}

View File

@ -1,10 +0,0 @@
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; }
}
}

View File

@ -1,10 +0,0 @@
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;
}
}

View File

@ -1,15 +0,0 @@
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; }
}
}

View File

@ -1,14 +0,0 @@
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; }
}
}

View File

@ -8,15 +8,13 @@ namespace IM_API.Domain.Events
public override string EventType => "IM.MESSAGE.MESSAGE_CREATED"; public override string EventType => "IM.MESSAGE.MESSAGE_CREATED";
public ChatType ChatType { get; set; } public ChatType ChatType { get; set; }
public MessageMsgType MessageMsgType { get; set; } public MessageMsgType MessageMsgType { get; set; }
public long SequenceId { get; set; } public int MessageId { get; set; }
public string MessageContent { get; set; } public string MessageContent { get; set; }
public int MsgSenderId { get; set; } public int MsgSenderId { get; set; }
public int MsgRecipientId { get; set; } public int MsgRecipientId { get; set; }
public MessageState State { get; set; } public MessageState State { get; set; }
public DateTimeOffset MessageCreated { get; set; } public DateTime MessageCreated { get; set; }
public string StreamKey { get; set; } public string StreamKey { get; set; }
public Guid ClientMsgId { get; set; }
public string BaseUrl { get; set; }

View File

@ -1,10 +0,0 @@
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; }
}
}

View File

@ -1,13 +0,0 @@
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; }
}
}

View File

@ -1,4 +1,4 @@
namespace IM_API.Dtos.Auth namespace IM_API.Dtos
{ {
public record RefreshDto(string refreshToken); public record RefreshDto(string refreshToken);
} }

View File

@ -1,4 +1,4 @@
namespace IM_API.Dtos.Conversation namespace IM_API.Dtos
{ {
public class ClearConversationsDto public class ClearConversationsDto
{ {

View File

@ -1,12 +0,0 @@
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; }
}
}

View File

@ -1,10 +1,8 @@
using IM_API.Dtos; using IM_API.Models;
using IM_API.Models;
using IM_API.VOs.Message;
namespace IM_API.VOs.Conversation namespace IM_API.Dtos
{ {
public class ConversationVo public class ConversationDto
{ {
public int Id { get; set; } public int Id { get; set; }
@ -21,14 +19,14 @@ namespace IM_API.VOs.Conversation
/// <summary> /// <summary>
/// 最后一条未读消息ID /// 最后一条未读消息ID
/// </summary> /// </summary>
public long? LastSequenceId { get; set; } public int? LastReadMessageId { get; set; }
/// <summary> /// <summary>
/// 未读消息数 /// 未读消息数
/// </summary> /// </summary>
public int UnreadCount { get; set; } public int UnreadCount { get; set; }
public ChatType ChatType { get; set; } public int ChatType { get; set; }
/// <summary> /// <summary>
@ -38,7 +36,7 @@ namespace IM_API.VOs.Conversation
/// <summary> /// <summary>
/// 最后一条消息时间 /// 最后一条消息时间
/// </summary> /// </summary>
public DateTimeOffset? DateTime { get; set; } = null; public DateTime? DateTime { get; set; } = null;
/// <summary> /// <summary>
/// 对方昵称 /// 对方昵称
@ -48,6 +46,6 @@ namespace IM_API.VOs.Conversation
/// 对方头像 /// 对方头像
/// </summary> /// </summary>
public string? TargetAvatar { get; set; } public string? TargetAvatar { get; set; }
public MessageBaseDto? LastReadMessage { get; set; }
} }
} }

View File

@ -1,10 +0,0 @@
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!;
}
}

View File

@ -1,8 +1,7 @@
using IM_API.Dtos.User; using IM_API.Models;
using IM_API.Models;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.Friend namespace IM_API.Dtos
{ {
public record FriendInfoDto public record FriendInfoDto
{ {
@ -14,7 +13,7 @@ namespace IM_API.Dtos.Friend
public FriendStatus StatusEnum { get; init; } public FriendStatus StatusEnum { get; init; }
public DateTimeOffset Created { get; init; } public DateTime Created { get; init; }
public string RemarkName { get; init; } = string.Empty; public string RemarkName { get; init; } = string.Empty;

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.Friend namespace IM_API.Dtos
{ {
public class FriendRequestDto public class FriendRequestDto
{ {

View File

@ -1,6 +1,6 @@
using IM_API.Models; using IM_API.Models;
namespace IM_API.Dtos.Friend namespace IM_API.Dtos
{ {
public class FriendRequestResDto public class FriendRequestResDto
{ {
@ -21,7 +21,7 @@ namespace IM_API.Dtos.Friend
/// <summary> /// <summary>
/// 申请时间 /// 申请时间
/// </summary> /// </summary>
public DateTimeOffset Created { get; set; } public DateTime Created { get; set; }
/// <summary> /// <summary>
/// 申请附言 /// 申请附言

View File

@ -1,22 +0,0 @@
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; }
}
}

View File

@ -1,51 +0,0 @@
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!;
}
}

View File

@ -1,8 +0,0 @@
namespace IM_API.Dtos.Group
{
public class GroupInviteUserDto
{
public int GroupId { get; set; }
public List<int> Ids { get; set; }
}
}

View File

@ -1,11 +0,0 @@
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; }
}
}

View File

@ -1,10 +0,0 @@
using IM_API.Models;
namespace IM_API.Dtos.Group
{
public class HandleGroupInviteDto
{
public int InviteId { get; set; }
public GroupInviteState Action { get; set; }
}
}

View File

@ -1,10 +0,0 @@
using IM_API.Models;
namespace IM_API.Dtos.Group
{
public class HandleGroupRequestDto
{
public int RequestId { get; set; }
public GroupRequestState Action { get; set; }
}
}

View File

@ -1,4 +1,4 @@
namespace IM_API.Dtos.Friend namespace IM_API.Dtos
{ {
public class HandleFriendRequestDto public class HandleFriendRequestDto
{ {

View File

@ -1,49 +0,0 @@
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 // 状态变更(如:对方正在输入、已读回执)
}
}

View File

@ -0,0 +1,16 @@
namespace IM_API.Dtos
{
public class LoginDto
{
public UserInfoDto userInfo { get; set; }
public string Token { get; set; }
public string RefreshToken { get; set; }
public DateTime ExpireAt { get; set; }
public LoginDto(UserInfoDto userInfo,string token, string refreshToken, DateTime expireAt) {
this.userInfo = userInfo;
this.Token = token;
this.RefreshToken = refreshToken;
this.ExpireAt = expireAt;
}
}
}

View File

@ -1,7 +1,7 @@
using IM_API.Tools; using IM_API.Tools;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.Auth namespace IM_API.Dtos
{ {
public class LoginRequestDto public class LoginRequestDto
{ {

View File

@ -1,26 +0,0 @@
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; }
}
}

View File

@ -1,18 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.Message
{
public class MessageQueryDto
{
[Required(ErrorMessage = "会话ID必填")]
public int ConversationId { get; set; }
// 锚点序号(如果为空,说明是第一次进聊天框,拉最新的)
public long? Cursor { get; set; }
// 查询方向0 - 查旧(Before), 1 - 查新(After)
public int Direction { get; set; } = 0;
public int Limit { get; set; } = 20;
}
}

View File

@ -1,17 +1,16 @@
using IM_API.Models; namespace IM_API.Dtos
namespace IM_API.Dtos
{ {
public record MessageBaseDto public record MessageBaseDto
{ {
// 使用 { get; init; } 确保对象创建后不可修改,且支持无参构造 // 使用 { get; init; } 确保对象创建后不可修改,且支持无参构造
public MessageMsgType Type { get; init; } = default!; public string Type { get; init; } = default!;
public ChatType ChatType { get; init; } = default!; public string ChatType { get; init; } = default!;
public Guid MsgId { get; init; } public string? MsgId { get; init; }
public int SenderId { get; init; } public int SenderId { get; init; }
public int ReceiverId { get; init; } public int ReceiverId { get; init; }
public string Content { get; set; } = default!; public int? GroupMemberId { get; init; }
public DateTimeOffset TimeStamp { get; init; } public string Content { get; init; } = default!;
public DateTime TimeStamp { get; init; }
public MessageBaseDto() { } public MessageBaseDto() { }
} }
} }

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.Auth namespace IM_API.Dtos
{ {
public class RegisterRequestDto public class RegisterRequestDto
{ {

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace IM_API.Dtos.User namespace IM_API.Dtos
{ {
public class UpdateUserDto public class UpdateUserDto
{ {

View File

@ -1,8 +0,0 @@
namespace IM_API.Dtos
{
public class UploadPartDto
{
public int PartNumber { get; set; }
public string? ETag { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More