fix: align backend APIs and upload flow

This commit is contained in:
2026-09-15 14:10:55 +08:00
parent 32177a7293
commit 53e6195938
149 changed files with 4791 additions and 435 deletions
@@ -1,7 +1,8 @@
using AutoMapper;
using AutoMapper;
using GroupService.Domain.IReposities;
using GroupService.WebApi.Application.Dtos;
using IM.Commons;
using Microsoft.EntityFrameworkCore;
namespace GroupService.WebApi.Application.Group
{
@@ -9,29 +10,33 @@ namespace GroupService.WebApi.Application.Group
{
private readonly IGroupReposity reposity;
private readonly IGroupMemberReposity memberReposity;
private readonly IMapper mapper;
private readonly IMapper mapper; private readonly IM.InitCommon.Management.RuntimePolicy runtime; private readonly global::GroupService.Infrastructure.GroupDbContext db;
public GroupService(IGroupReposity reposity, IGroupMemberReposity memberReposity, IMapper mapper)
public GroupService(IGroupReposity reposity, IGroupMemberReposity memberReposity, IMapper mapper, IM.InitCommon.Management.RuntimePolicy runtime, global::GroupService.Infrastructure.GroupDbContext db)
{
this.reposity = reposity;
this.memberReposity = memberReposity;
this.mapper = mapper;
this.mapper = mapper; this.runtime = runtime; this.db = db;
}
public async Task<Result<GroupResponse>> CreateAsync(GroupCreateCommand command)
{
var policy = runtime.Current;
if (policy.CreatedGroupLimit > 0 && await db.Groups.CountAsync(x => x.GroupMaster == command.GroupMasterId) >= policy.CreatedGroupLimit)
return Result.Fail<GroupResponse>(ResultCode.PERMISSION_DENIED, "创建群组数量已达到平台上限");
var group = new Domain.Entities.Group(command.GroupMasterId, command.Name);
group.Update(null, (Domain.Enums.GroupAuthorityType)policy.DefaultJoinAuthority, null, null);
reposity.Create(group);
return Result<GroupResponse>.Success(mapper.Map<GroupResponse>(group));
}
public async Task<Result<List<GroupResponse>>> GetAllAsync(Guid userId)
{
var groups = await reposity.FindByMasterIdAsync(userId);
var groups = await reposity.FindByMemberIdAsync(userId);
return Result<List<GroupResponse>>.Success(mapper.Map<List<GroupResponse>>(groups));
}
public async Task<Result<GroupResponse>> GetByIdAsync(Guid groupId)
public async Task<Result<GroupResponse>> GetByIdAsync(Guid groupId, Guid userId)
{
var group = await reposity.FindByIdAsync(groupId);
if (group is null)
@@ -39,9 +44,36 @@ namespace GroupService.WebApi.Application.Group
return Result<GroupResponse>.Fail(ResultCode.GROUP_NOT_FOUND);
}
if (!await memberReposity.CheckMemberExistAsync(groupId, userId))
{
return Result<GroupResponse>.Fail(ResultCode.PERMISSION_DENIED);
}
return Result<GroupResponse>.Success(mapper.Map<GroupResponse>(group));
}
public async Task<Result<object>> DissolveAsync(Guid groupId, Guid userId)
{
var group = await reposity.FindByIdAsync(groupId);
if (group is null)
{
return Result.Fail(ResultCode.GROUP_NOT_FOUND);
}
if (group.GroupMaster != userId)
{
return Result.Fail(ResultCode.PERMISSION_DENIED);
}
var members = await memberReposity.FindByGroupIdAsync(groupId);
foreach (var member in members)
{
member.Leave();
}
group.SoftDelete();
return Result.Success();
}
public async Task<Result<GroupResponse>> UpdateAsync(GroupUpdateCommand command)
{
var group = await reposity.FindByIdAsync(command.GroupId);