添加项目文件。
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
using AutoMapper;
|
||||
using GroupService.Domain.Entities;
|
||||
using GroupService.WebApi.Application.Dtos;
|
||||
|
||||
namespace GroupService.WebApi.Application.GroupRequest
|
||||
{
|
||||
public class GroupRequestMapperConfig : Profile
|
||||
{
|
||||
public GroupRequestMapperConfig()
|
||||
{
|
||||
CreateMap<GroupJoinRequest, GroupRequestResponse>()
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.CreationTime))
|
||||
.ForMember(dest => dest.Updated, opt => opt.MapFrom(src => src.ModificationTime))
|
||||
.ForMember(dest => dest.GroupAvatar, opt => opt.MapFrom(src => src.GroupProfile.Avatar))
|
||||
.ForMember(dest => dest.GroupName, opt => opt.MapFrom(src => src.GroupProfile.GroupName))
|
||||
.ForMember(dest => dest.UserNickName, opt => opt.MapFrom(src => src.UserProfile.NickName))
|
||||
.ForMember(dest => dest.UserAvatar, opt => opt.MapFrom(src => src.UserProfile.Avatar))
|
||||
.ForMember(dest => dest.OperatorAvatar, opt => opt.MapFrom(src => src.OperatorAvatar))
|
||||
.ForMember(dest => dest.OperatorName, opt => opt.MapFrom(src => src.OperatorName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
using AutoMapper;
|
||||
using GroupService.Domain.Entities;
|
||||
using GroupService.Domain.IReposities;
|
||||
using GroupService.Domain.ValueObjects;
|
||||
using GroupService.WebApi.Application.Dtos;
|
||||
using GroupService.WebApi.Application.IntegrationServices;
|
||||
using IM.Commons;
|
||||
|
||||
namespace GroupService.WebApi.Application.GroupRequest
|
||||
{
|
||||
public class GroupRequestService
|
||||
{
|
||||
private readonly IGroupRequestReposity reposity;
|
||||
private readonly IGroupReposity groupReposity;
|
||||
private readonly IMapper mapper;
|
||||
private readonly IGroupMemberReposity memberReposity;
|
||||
private readonly IIdentityIntegrationService idService;
|
||||
|
||||
public GroupRequestService(IGroupRequestReposity reposity, IGroupReposity groupReposity, IMapper mapper, IGroupMemberReposity memberReposity, IIdentityIntegrationService idService)
|
||||
{
|
||||
this.reposity = reposity;
|
||||
this.groupReposity = groupReposity;
|
||||
this.mapper = mapper;
|
||||
this.memberReposity = memberReposity;
|
||||
this.idService = idService;
|
||||
}
|
||||
|
||||
public async Task<Result<GroupRequestResponse>> CreateAsync(Guid groupId, Guid userId, string? desc)
|
||||
{
|
||||
var group = await groupReposity.FindByIdAsync(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
return Result.Fail<GroupRequestResponse>(ResultCode.GROUP_NOT_FOUND);
|
||||
}
|
||||
|
||||
var user = await idService.FindUserByIdAsync(userId);
|
||||
|
||||
var groupProfile = new GroupProfile()
|
||||
{
|
||||
Avatar = group.Avatar,
|
||||
GroupName = group.Name
|
||||
};
|
||||
|
||||
var userProfile = new UserProfile()
|
||||
{
|
||||
Avatar = user.Data.Avatar,
|
||||
NickName = user.Data.NickName
|
||||
};
|
||||
|
||||
|
||||
var request = new GroupJoinRequest(userId,userProfile, groupId, groupProfile, desc);
|
||||
reposity.Create(request);
|
||||
|
||||
if (group.Authority == Domain.Enums.GroupAuthorityType.ANYONE_CAN_JOIN)
|
||||
{
|
||||
request.Approve(user.Data.Id, user.Data.NickName, user.Data.Avatar);
|
||||
}
|
||||
|
||||
return Result.Success(mapper.Map<GroupRequestResponse>(request));
|
||||
}
|
||||
|
||||
public async Task<Result<object>> HandleAsync(RequestHandleCommand command)
|
||||
{
|
||||
var request = await reposity.FindByIdAsync(command.RequestId);
|
||||
if (request is null)
|
||||
{
|
||||
return Result.Fail<object>(ResultCode.GROUP_REQUEST_NOT_FOUND);
|
||||
}
|
||||
|
||||
var member = await memberReposity.FindOneByGroupIdAndUserIdAsync(request.GroupId, command.UserId);
|
||||
|
||||
if (member is null || member.Role == Domain.Enums.GroupMemberRole.Normal)
|
||||
{
|
||||
return Result.Fail<object>(ResultCode.PERMISSION_DENIED);
|
||||
}
|
||||
|
||||
if (command.Action == RequestHandleAction.Accept)
|
||||
{
|
||||
request.Approve(member.UserId, member.GroupNickName, member.Avatar);
|
||||
}
|
||||
else if (command.Action == RequestHandleAction.Reject)
|
||||
{
|
||||
request.Decline(member.UserId, member.GroupNickName, member.Avatar);
|
||||
}
|
||||
return Result.Success();
|
||||
|
||||
}
|
||||
|
||||
public async Task<Result<GroupRequestResponse>> GetByIdAsync(Guid id, Guid userId)
|
||||
{
|
||||
var request = await reposity.FindByIdAsync(id);
|
||||
if (request is null || (request.UserId != userId && request.OperatorId != userId))
|
||||
{
|
||||
return Result.Fail<GroupRequestResponse>(ResultCode.GROUP_REQUEST_NOT_FOUND);
|
||||
}
|
||||
|
||||
return Result.Success(mapper.Map<GroupRequestResponse>(request));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace GroupService.WebApi.Application.GroupRequest
|
||||
{
|
||||
public record RequestHandleCommand(Guid RequestId, Guid UserId, RequestHandleAction Action);
|
||||
public enum RequestHandleAction
|
||||
{
|
||||
Accept = 0,
|
||||
Reject = 1
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user