69 lines
2.4 KiB
Java
69 lines
2.4 KiB
Java
package de.ph87.tools.group;
|
|
|
|
import de.ph87.tools.group.dto.GroupDto;
|
|
import de.ph87.tools.group.uuid.GroupUuid;
|
|
import de.ph87.tools.user.User;
|
|
import de.ph87.tools.user.UserAccessService;
|
|
import de.ph87.tools.user.UserService;
|
|
import de.ph87.tools.user.uuid.UserPrivateUuid;
|
|
import de.ph87.tools.user.uuid.UserPublicUuid;
|
|
import lombok.NonNull;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.web.server.ResponseStatusException;
|
|
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Slf4j
|
|
@Service
|
|
@Transactional
|
|
@RequiredArgsConstructor
|
|
public class GroupReadService {
|
|
|
|
private final GroupAccessService groupAccessService;
|
|
|
|
private final GroupRepository groupRepository;
|
|
|
|
private final UserService userService;
|
|
|
|
private final UserAccessService userAccessService;
|
|
|
|
private final GroupMapper groupMapper;
|
|
|
|
@NonNull
|
|
public GroupDto get(@NonNull final UserPrivateUuid privateUuid, @NonNull final GroupUuid groupUuid) {
|
|
final GroupAccess ug = groupAccessService.access(privateUuid, groupUuid);
|
|
return groupMapper.toDto(ug.group);
|
|
}
|
|
|
|
@NonNull
|
|
public Group getGroupByGroupUuid(@NonNull final GroupUuid groupUuid) {
|
|
return groupRepository.findByUuid(groupUuid.uuid).orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST));
|
|
}
|
|
|
|
/* FIND & GET ----------------------------------------------------------------------------------- */
|
|
|
|
@NonNull
|
|
public Set<GroupDto> findAllCommonGroups(@NonNull final User a, @NonNull final User b) {
|
|
return groupRepository.findAllByUsersContainsAndUsersContains(a, b).stream().map(groupMapper::toDto).collect(Collectors.toSet());
|
|
}
|
|
|
|
@NonNull
|
|
public Set<GroupDto> findAllJoined(@NonNull final UserPrivateUuid privateUuid) {
|
|
final User principal = userAccessService.access(privateUuid);
|
|
return groupRepository.findAllByUsersContains(principal).stream().map(groupMapper::toDto).collect(Collectors.toSet());
|
|
}
|
|
|
|
@NonNull
|
|
public Set<GroupDto> findAllCommon(@NonNull final UserPrivateUuid privateUuid, @NonNull final UserPublicUuid targetUuid) {
|
|
final User principal = userAccessService.access(privateUuid);
|
|
final User target = userService.getByPublicUuid(targetUuid);
|
|
return findAllCommonGroups(principal, target);
|
|
}
|
|
|
|
}
|