Tools/src/main/java/de/ph87/tools/group/GroupReadService.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);
}
}