2

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();
    }
}
squillman
  • 13,363
  • 3
  • 41
  • 60

0 Answers0