Fixed public quizz not appearing in quizz list

This commit is contained in:
Samy Avrillon 2025-06-09 17:04:07 +02:00
parent be0ec073a3
commit 8ae7457016
Signed by: Mysaa
GPG Key ID: 0220AC4A3D6A328B
6 changed files with 44 additions and 5 deletions

View File

@ -9,7 +9,7 @@ services:
- misanetwork - misanetwork
misael: misael:
image: 'misael:latest' image: 'mysaa/misael:latest'
build: . build: .
environment: environment:
- 'MISAEL_DATABASE=jdbc:postgresql://postgres:5432/misael' - 'MISAEL_DATABASE=jdbc:postgresql://postgres:5432/misael'

View File

@ -1,6 +1,7 @@
package com.bernard.misael.repository; package com.bernard.misael.repository;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
@ -11,4 +12,6 @@ public interface QuizzRepository extends JpaRepository<Quizz,Long> {
public @NonNull Optional<Quizz> findById(@NonNull Long id); public @NonNull Optional<Quizz> findById(@NonNull Long id);
public @NonNull Set<Quizz> findByIsPublicTrue();
} }

View File

@ -1,5 +1,8 @@
package com.bernard.misael.service; package com.bernard.misael.service;
import java.util.List;
import com.bernard.misael.model.Quizz;
import com.bernard.misael.model.User; import com.bernard.misael.model.User;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
@ -8,4 +11,7 @@ public interface QuizzManager {
public JsonNode answer(User user, long quizzId,JsonNode data); public JsonNode answer(User user, long quizzId,JsonNode data);
public JsonNode next(User user, long quizzId); public JsonNode next(User user, long quizzId);
public boolean canAccessQuizz(User user, long quizzId);
public List<Quizz> accessibleQuizz(User user);
} }

View File

@ -1,6 +1,10 @@
package com.bernard.misael.service; package com.bernard.misael.service;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -22,6 +26,8 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.persistence.EntityNotFoundException;
@Service @Service
public class QuizzManagerImpl implements QuizzManager { public class QuizzManagerImpl implements QuizzManager {
@ -168,4 +174,28 @@ public class QuizzManagerImpl implements QuizzManager {
return out; return out;
} }
@Override
public boolean canAccessQuizz(User user, long quizzId) {
try{
Quizz quizz = qRepository.getReferenceById(quizzId);
return quizz.isPublic() || quizz.getOwner().equals(user);
} catch (EntityNotFoundException e) {
return false;
}
}
@Override
public List<Quizz> accessibleQuizz(User user) {
Set<Quizz> ownQuizz = user.getMyQuizzs();
Set<Quizz> publicQuizz = qRepository.findByIsPublicTrue();
publicQuizz.removeAll(ownQuizz);
return Stream.concat(
ownQuizz.stream()
.sorted((q1,q2) -> q1.getName().compareTo(q2.getName())),
publicQuizz.stream()
.sorted((q1,q2) -> q1.getName().compareTo(q2.getName()))
).collect(Collectors.toList());
}
} }

View File

@ -73,9 +73,9 @@ public class AuthController {
@PostMapping("/adduser") @PostMapping("/adduser")
@Secured("ADD_USERS") @Secured("ADD_USERS")
public String registration(@Valid @ModelAttribute("newuser") UserDto userDto, public String registration(@Valid @ModelAttribute("newuser") UserDto userDto,
BindingResult result, BindingResult result,
Model model, Model model,
Principal p){ Principal p){
User existingUser = userService.findUserByName(userDto.getName()); User existingUser = userService.findUserByName(userDto.getName());
if(existingUser != null){ if(existingUser != null){

View File

@ -46,7 +46,7 @@ public class QuestionsController {
if (p!=null) if (p!=null)
u = ur.findByName(p.getName()); u = ur.findByName(p.getName());
if(u!=null) { if(u!=null) {
model.addAttribute("quizz",u.getMyQuizzs()); model.addAttribute("quizz",qm.accessibleQuizz(u));
} }
return "quizz.html"; return "quizz.html";
} }