1
0

feat(web): 新增根据当前登陆用户查询记录

This commit is contained in:
2024-11-27 19:02:08 +08:00
parent aba9a1716c
commit efe393835c
11 changed files with 102 additions and 56 deletions

View File

@@ -51,32 +51,60 @@ public abstract class SimpleService<ENTITY extends SimpleEntity> {
}
public ImmutableSet<ENTITY> list() {
return Sets.immutable.ofAll(repository.findAll());
User user = userService.currentLoginUser();
return Sets.immutable.ofAll(repository.findAll(
(root, query, builder) -> builder.equal(root.get("createdUser"), user)
));
}
public ImmutableSet<ENTITY> list(ImmutableSet<Long> ids) {
return Sets.immutable.ofAll(repository.findAllById(ids.select(ObjectUtil::isNotNull)));
User user = userService.currentLoginUser();
return Sets.immutable.ofAll(repository.findAll(
(root, query, builder) -> builder.and(
builder.in(root.get("id")).value(ids.select(ObjectUtil::isNotNull)),
builder.equal(root.get("createdUser"), user)
)
));
}
public ENTITY detail(Long id) {
if (ObjectUtil.isNull(id)) {
return null;
}
return repository.findById(id).orElse(null);
User user = userService.currentLoginUser();
return repository.findOne(
(root, query, builder) -> builder.and(
builder.equal(root.get("id"), id),
builder.equal(root.get("createdUser"), user)
)
)
.orElse(null);
}
public Optional<ENTITY> detailOptional(Long id) {
if (ObjectUtil.isNull(id)) {
return Optional.empty();
}
return repository.findById(id);
User user = userService.currentLoginUser();
return repository.findOne(
(root, query, builder) -> builder.and(
builder.equal(root.get("id"), id),
builder.equal(root.get("createdUser"), user)
)
);
}
public ENTITY detailOrThrow(Long id) {
if (ObjectUtil.isNull(id)) {
throw new IdNotFoundException(id);
}
return repository.findById(id).orElseThrow(() -> new IdNotFoundException(id));
User user = userService.currentLoginUser();
return repository.findOne(
(root, query, builder) -> builder.and(
builder.equal(root.get("id"), id),
builder.equal(root.get("createdUser"), user)
)
).orElseThrow(() -> new IdNotFoundException(id));
}
@Transactional(rollbackOn = Throwable.class)

View File

@@ -2,9 +2,11 @@ package com.eshore.gringotts.web.domain.confirmation.repository;
import com.eshore.gringotts.web.domain.base.repository.SimpleRepository;
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
import com.eshore.gringotts.web.domain.user.entity.User;
import java.util.List;
import java.util.Optional;
import javax.transaction.Transactional;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
@@ -19,16 +21,16 @@ import org.springframework.stereotype.Repository;
public interface ConfirmationRepository extends SimpleRepository<Confirmation, Long> {
@Override
@EntityGraph(value = "confirmation.list", type = EntityGraph.EntityGraphType.FETCH)
List<Confirmation> findAll();
List<Confirmation> findAll(Specification<Confirmation> specification);
@Override
@EntityGraph(value = "confirmation.detail", type = EntityGraph.EntityGraphType.FETCH)
Optional<Confirmation> findById(Long id);
Optional<Confirmation> findOne(Specification<Confirmation> specification);
Boolean existsByTarget_Id(Long id);
@Transactional
@Modifying
@Query("update Confirmation confirmation set confirmation.state = ?2 where confirmation.id = ?1")
void updateStateById(Long id, Confirmation.State state);
@Query("update Confirmation confirmation set confirmation.state = ?2, confirmation.modifiedUser = ?3 where confirmation.id = ?1")
void updateStateById(Long id, Confirmation.State state, User modifiedUser);
}

View File

@@ -15,10 +15,12 @@ import org.springframework.stereotype.Service;
@Service
public class ConfirmationService extends SimpleService<Confirmation> {
private final ConfirmationRepository confirmationRepository;
private final UserService userService;
public ConfirmationService(ConfirmationRepository confirmationRepository, UserService userService) {
super(confirmationRepository, userService);
this.confirmationRepository = confirmationRepository;
this.userService = userService;
}
@Override
@@ -30,11 +32,11 @@ public class ConfirmationService extends SimpleService<Confirmation> {
}
public void submit(Long id) {
confirmationRepository.updateStateById(id, Confirmation.State.CHECKING);
confirmationRepository.updateStateById(id, Confirmation.State.CHECKING, userService.currentLoginUser());
}
public void retract(Long id) {
confirmationRepository.updateStateById(id, Confirmation.State.DRAFT);
confirmationRepository.updateStateById(id, Confirmation.State.DRAFT, userService.currentLoginUser());
}
public static final class ConfirmationDuplicatedException extends RuntimeException {

View File

@@ -4,6 +4,7 @@ import com.eshore.gringotts.web.domain.base.repository.SimpleRepository;
import com.eshore.gringotts.web.domain.resource.entity.DataResource;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.stereotype.Repository;
@@ -12,9 +13,9 @@ import org.springframework.stereotype.Repository;
public interface DataResourceRepository extends SimpleRepository<DataResource, Long> {
@Override
@EntityGraph(value = "data_resource.list", type = EntityGraph.EntityGraphType.FETCH)
List<DataResource> findAll();
List<DataResource> findAll(Specification<DataResource> specification);
@Override
@EntityGraph(value = "data_resource.detail", type = EntityGraph.EntityGraphType.FETCH)
Optional<DataResource> findById(Long id);
Optional<DataResource> findOne(Specification<DataResource> specification);
}