I have the following scenario. A user makes a REST request to my server (http://localhost/server/folders). The server knows the user and should now only respond with relevant information for the user, which means show only folders where the user is registered and show only tasks where the user is responsible.
It is already working that I only get the folders where the user is registered with the jpa-method findByRegistrationsInternalId
but I get all tasks, even those I'm not assigned to.
So how can i filter on the tasks?
I have the following Entities
Folder -1--n-> Users
Folder -n--m-> Tasks -1--1-> ResponsibleUser
public class Folder
{
@Id
private String id;
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "Folder", orphanRemoval = true)
@Setter(AccessLevel.NONE)
private Set<FolderRegistration> registrations = new HashSet<FolderRegistration>();
@OrderBy("id ASC")
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "Folders")
@Setter(AccessLevel.NONE)
private Set<Task> tasks = new HashSet<Task>();
....
}
public class FolderRegistration
{
@Id
private String internalId;
@Id
@Column(insertable = false, updatable = false)
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private String FolderId;
@JsonIgnore
@ManyToOne
@JoinColumns(
{ @JoinColumn(name = "FolderId", referencedColumnName = "id"),
@JoinColumn(name = "tenant", referencedColumnName = "tenant", insertable = false, updatable = false) })
private Folder Folder;
}
public class Task
{
@Id
private Long id;
....
@JsonIgnore
private String responsibleEmployeeId;
....
@JsonIgnore
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Folder_Task", //
joinColumns =
{ @JoinColumn(name = "tenant", referencedColumnName = "tenant", insertable = false, updatable = false), @JoinColumn(name = "taskId", referencedColumnName = "id") }, //
inverseJoinColumns =
{ @JoinColumn(name = "tenant", referencedColumnName = "tenant", insertable = false, updatable = false), @JoinColumn(name = "FolderId", referencedColumnName = "id") })
private List<Folder> Folders = new ArrayList<Folder>();
....
}
public interface LogisticsTaskFolderRepository extends JpaRepository<LogisticsTaskFolder, LogisticsTaskFolderId>
{
List<Folder> findByRegistrationsInternalId(String internalId);
}
@RestController
@RequestMapping(value = "/api/folder")
public class FolderEndpoint
{
@Autowired
FolderService folderService;
@GetMapping
List<Folder> getFolders() throws Exception
{
return folderService.getFolders();
}
}