Forum Message UI Improvement (Thesis Board #3470) #61

Merged
tozh4728 merged 20 commits from 3470-forum-msg-ui-improvement into develop 2024-12-19 15:28:23 +01:00
6 changed files with 37 additions and 6 deletions
Showing only changes of commit 3e71bc1c9e - Show all commits

View File

@ -27,5 +27,5 @@ public interface ProjectForumService {
boolean hasUnreadThreads(Project project, User user); boolean hasUnreadThreads(Project project, User user);
int getUnreadThreadsCount(Project project, User user); long getUnreadThreadsCount(Project project, User user);
} }

View File

@ -107,7 +107,9 @@ public class ProjectForumServiceImpl implements ProjectForumService {
} }
@Override @Override
public int getUnreadThreadsCount(Project project, User user) { public long getUnreadThreadsCount(Project project, User user) {
return projectThreadRepository.getUnreadThreadsCount(project, user);
/*
List<ProjectThread> threads = getThreads(project); List<ProjectThread> threads = getThreads(project);
int count = 0; int count = 0;
for (ProjectThread thread : threads) { for (ProjectThread thread : threads) {
@ -116,6 +118,8 @@ public class ProjectForumServiceImpl implements ProjectForumService {
} }
} }
return count; return count;
*/
} }
@Override @Override

View File

@ -5,6 +5,7 @@ import se.su.dsv.scipro.system.JpaRepository;
import se.su.dsv.scipro.system.QueryDslPredicateExecutor; import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
import se.su.dsv.scipro.forum.dataobjects.ProjectThread; import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.system.User;
import java.util.List; import java.util.List;
@ -13,4 +14,6 @@ public interface ProjectThreadRepository extends JpaRepository<ProjectThread, Lo
List<ProjectThread> findByProject(Project project); List<ProjectThread> findByProject(Project project);
long getUnreadThreadsCount(Project project, User user);
} }

View File

@ -1,5 +1,6 @@
package se.su.dsv.scipro.forum; package se.su.dsv.scipro.forum;
import jakarta.persistence.Query;
import se.su.dsv.scipro.forum.dataobjects.ProjectThread; import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
import se.su.dsv.scipro.forum.dataobjects.QProjectThread; import se.su.dsv.scipro.forum.dataobjects.QProjectThread;
import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.Project;
@ -8,6 +9,8 @@ import se.su.dsv.scipro.system.GenericRepo;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.inject.Provider; import jakarta.inject.Provider;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import se.su.dsv.scipro.system.User;
import java.util.List; import java.util.List;
public class ProjectThreadRepositoryImpl extends GenericRepo<ProjectThread, Long> implements ProjectThreadRepository { public class ProjectThreadRepositoryImpl extends GenericRepo<ProjectThread, Long> implements ProjectThreadRepository {
@ -21,4 +24,25 @@ public class ProjectThreadRepositoryImpl extends GenericRepo<ProjectThread, Long
return findAll(QProjectThread.projectThread.project.eq(project)); return findAll(QProjectThread.projectThread.project.eq(project));
} }
@Override
public long getUnreadThreadsCount(Project project, User user) {
StringBuilder sql = new StringBuilder()
.append("select count(distinct(thread_id)) result ")
.append(" from (select fp.thread_id as thread_id, fp.id as post_id, ")
.append(" exists (select `read` ")
.append(" from forum_post_read_state fprs ")
.append(" where fprs.forum_post_id = fp.id and ")
.append(" fprs.user_id = :uid and ")
.append(" fprs.read = 1) as post_read ")
.append(" from project_thread pt, forum_post fp ")
.append(" where pt.thread_id = fp.thread_id and ")
.append(" pt.project_id = :pid) tbl_ex ")
.append(" where post_read = 0");
Query query = em().createNativeQuery(sql.toString());
query.setParameter("uid", user.getId())
.setParameter("pid", project.getId());
return (Long)query.getSingleResult();
}
} }

View File

@ -20,12 +20,12 @@ public abstract class NumberOfMessagesPanel extends Panel {
protected void onComponentTag(ComponentTag tag) { protected void onComponentTag(ComponentTag tag) {
super.onComponentTag(tag); super.onComponentTag(tag);
int count = getMessageCount(); long count = getMessageCount();
if (count > 0) { if (count > 0) {
model.setObject("(" + count + ")"); model.setObject("(" + count + ")");
} }
} }
public abstract int getMessageCount(); public abstract long getMessageCount();
} }

View File

@ -226,7 +226,7 @@ public class SupervisorMyProjectsPanel extends Panel {
//item.add(container); //item.add(container);
//boolean hasUnreadThreads = projectForumService.hasUnreadThreads(projectModel.getObject(), SciProSession.get().getUser()); //boolean hasUnreadThreads = projectForumService.hasUnreadThreads(projectModel.getObject(), SciProSession.get().getUser());
int msgCount = projectForumService.getUnreadThreadsCount(projectModel.getObject(), SciProSession.get().getUser()); long msgCount = projectForumService.getUnreadThreadsCount(projectModel.getObject(), SciProSession.get().getUser());
// todo: reconsider name of this id, needs to be improved. // todo: reconsider name of this id, needs to be improved.
Fragment fragment = new Fragment(id, "parentMarkupId", SupervisorMyProjectsPanel.this); Fragment fragment = new Fragment(id, "parentMarkupId", SupervisorMyProjectsPanel.this);
@ -246,7 +246,7 @@ public class SupervisorMyProjectsPanel extends Panel {
fragment.add(new NumberOfMessagesPanel("counter") { fragment.add(new NumberOfMessagesPanel("counter") {
@Override @Override
public int getMessageCount() { public long getMessageCount() {
return msgCount; return msgCount;
} }
}); });