Skip to content
This repository was archived by the owner on May 26, 2024. It is now read-only.

Commit bc97fba

Browse files
committed
OMG
1 parent b5d9b67 commit bc97fba

File tree

6 files changed

+188
-99
lines changed

6 files changed

+188
-99
lines changed

Full Spring/Day 63/1-Project manager/projectmaneger/src/main/java/com/codingdojo/fs/controllers/HomeController.java

Lines changed: 31 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -97,36 +97,23 @@ public String homePage(Model model, HttpSession session) {
9797
User thisUser = userServ.findUserById(newUserId);
9898
model.addAttribute("thisUser", thisUser);
9999

100-
// all the projects regardless
101-
// List<Project> projects = projectServ.findAllProjects();
102-
// List<Project> allProjectUserIsNotJoinedat = new ArrayList<>();
103-
// List<Project> allProjectsUSerISpartOf = new ArrayList<>();
104-
105-
// for (Project project : projects) {
106-
// if (project.getJoinee() != thisUser) {
107-
// allProjectUserIsNotJoinedat.add(0, project);
108-
// } else {
109-
// allProjectsUSerISpartOf.add(0, project);
110-
// }
111-
112-
// }
113-
114-
// model.addAttribute("allprojects", allProjectsUSerISpartOf);
115-
// model.addAttribute("notallprojects", allProjectUserIsNotJoinedat);
116-
117-
List<Object[]> test = projectServ.findAllProjectsForUser1(newUserId);
118-
List<Object[]> test2 = projectServ.findallNotInUser(newUserId);
119-
for (Object[] item : test2) {
120-
for (Object value : item) {
121-
System.out.print(value + " ");
122-
}
123-
System.out.println();
124-
}
125-
model.addAttribute("test1", test);
126-
model.addAttribute("test2", test2);
100+
// Query to return all the projects the user is part of
101+
102+
// List<Object[]> allProjects = projectServ.findAllProjectsContainingUser(newUserId);
103+
104+
List<Object[]> allProjectsUserIsLeader = projectServ.allProjectsCreatedByUser(newUserId);
105+
model.addAttribute("fromUser", allProjectsUserIsLeader);
106+
// System.out.println(allProjects);
107+
// model.addAttribute("allProjects", allProjects);
108+
// Query to return all the projects the user is not part of
109+
110+
List<Object[]> notProjects = projectServ.findProjectsNotRelatedToUser(newUserId);
111+
model.addAttribute("notProjects", notProjects );
112+
127113
return "hello.jsp";
128114
}
129115

116+
130117
@GetMapping("/logout")
131118
public String logout(HttpSession session) {
132119
session.removeAttribute("newUser");
@@ -137,24 +124,23 @@ public String logout(HttpSession session) {
137124

138125
@RequestMapping("/projects/new")
139126
public String showAddingProjectsPage(@ModelAttribute("project") Project project, Model model) {
140-
// to capture the form input
141-
// [2023-09-05]
142-
// System.out.println(project.getDueDate());
143127
model.addAttribute("project", new Project());
144128
return "addproject.jsp";
145129
}
146130

147131
@PostMapping("/projects/new")
148132
public String createProject(@Valid @ModelAttribute("project") Project project, BindingResult result,
149-
HttpSession session) {
133+
HttpSession session , Model model) {
150134
if (result.hasErrors()) {
135+
model.addAttribute("project", new Project());
151136
return "addproject.jsp";
152137
} else {
153138
Long userId = (Long) session.getAttribute("newUser");
154139
User user = userServ.findUserById(userId);
155140

156-
project.setLeader(user);
157-
project.setJoinee(user);
141+
project.setLeader(user);
142+
// no need to add the user to the joinee field
143+
// project.setJoinee(user);
158144
projectServ.addProject(project);
159145
return "redirect:/dashboard";
160146
}
@@ -197,9 +183,15 @@ public String delete(@PathVariable("id") Long id, Model model, HttpSession sessi
197183

198184
// //projects/${project.id}/leave
199185
@RequestMapping("/projects/{id}/leave")
200-
public String leave(@PathVariable("id") Long id) {
186+
public String leave(@PathVariable("id") Long id , HttpSession session) {
201187
Project project = projectServ.findProjectById(id);
202-
project.setJoinee(null);
188+
Long userId = (Long) session.getAttribute("newUser");
189+
User user = userServ.findUserById(userId);
190+
// User thisUser = userServ.findUserById(id);
191+
192+
193+
project.getMembers().remove(user);
194+
// project.setJoinee(null);
203195
projectServ.updateProject(project);
204196
return "redirect:/dashboard";
205197
}
@@ -210,7 +202,10 @@ public String borrow(@PathVariable("id") Long id, HttpSession session) {
210202
Project project = projectServ.findProjectById(id);
211203
Long userId = (Long) session.getAttribute("newUser");
212204
User user = userServ.findUserById(userId);
213-
project.setJoinee(user);
205+
206+
project.getMembers().add(user);
207+
208+
// project.setJoinee(user);
214209

215210
projectServ.updateProject(project);
216211
System.out.println("Successs!");

Full Spring/Day 63/1-Project manager/projectmaneger/src/main/java/com/codingdojo/fs/models/Project.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@
22

33
// import java.time.LocalDate;
44
import java.util.Date;
5+
import java.util.List;
56

67
import org.springframework.format.annotation.DateTimeFormat;
78

9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
811
import jakarta.persistence.Column;
912
import jakarta.persistence.Entity;
1013
import jakarta.persistence.FetchType;
1114
import jakarta.persistence.GeneratedValue;
1215
import jakarta.persistence.GenerationType;
1316
import jakarta.persistence.Id;
1417
import jakarta.persistence.JoinColumn;
18+
import jakarta.persistence.JoinTable;
19+
import jakarta.persistence.ManyToMany;
1520
import jakarta.persistence.ManyToOne;
1621
import jakarta.persistence.PrePersist;
1722
import jakarta.persistence.PreUpdate;
@@ -72,17 +77,40 @@ public Project(
7277
private User leader;
7378

7479
// joineees
75-
@ManyToOne(fetch = FetchType.LAZY)
76-
@JoinColumn(name = "joinee_id")
77-
private User joinee;
80+
// @ManyToOne(fetch = FetchType.LAZY)
81+
// @JoinColumn(name = "joinee_id")
82+
// private User joinee;
7883

79-
public User getJoinee() {
80-
return joinee;
81-
}
8284

83-
public void setJoinee(User joinee) {
84-
this.joinee = joinee;
85-
}
85+
86+
87+
// @ManyToMany
88+
89+
// members of the project
90+
@JsonIgnore
91+
@ManyToMany(fetch = FetchType.LAZY)
92+
@JoinTable(
93+
name = "memebers_projects",
94+
joinColumns = @JoinColumn(name = "project_id"),
95+
inverseJoinColumns = @JoinColumn(name = "joinee_id")
96+
)
97+
private List<User> members;
98+
99+
// public User getJoinee() {
100+
// return joinee;
101+
// }
102+
103+
// public void setJoinee(User joinee) {
104+
// this.joinee = joinee;
105+
// }
106+
107+
public List<User> getMembers() {
108+
return members;
109+
}
110+
111+
public void setMembers(List<User> members) {
112+
this.members = members;
113+
}
86114

87115
public Project(User leader) {
88116
this.leader = leader;

Full Spring/Day 63/1-Project manager/projectmaneger/src/main/java/com/codingdojo/fs/models/User.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@
66

77
import org.springframework.format.annotation.DateTimeFormat;
88

9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
911
import jakarta.persistence.Column;
1012
import jakarta.persistence.Entity;
1113
import jakarta.persistence.FetchType;
1214
// import jakarta.persistence.FetchType;
1315
import jakarta.persistence.GeneratedValue;
1416
import jakarta.persistence.GenerationType;
1517
import jakarta.persistence.Id;
18+
import jakarta.persistence.JoinColumn;
19+
import jakarta.persistence.JoinTable;
20+
import jakarta.persistence.ManyToMany;
1621
import jakarta.persistence.OneToMany;
1722
// import jakarta.persistence.OneToMany;
1823
import jakarta.persistence.PrePersist;
@@ -95,20 +100,37 @@ protected void onUpdate() {
95100
private List<Project> projects;
96101

97102
// joinee or peple that join the team
98-
@OneToMany(mappedBy = "joinee", fetch = FetchType.LAZY)
99-
private List<Project> projectsShared;
103+
// @OneToMany(mappedBy = "joinee", fetch = FetchType.LAZY)
104+
// private List<Project> projectsShared;
105+
106+
@JsonIgnore
107+
@ManyToMany(fetch = FetchType.LAZY)
108+
@JoinTable(
109+
name = "memebers_projects",
110+
joinColumns = @JoinColumn(name = "joinee_id"),
111+
inverseJoinColumns = @JoinColumn(name = "project_id")
112+
)
113+
private List<Project> ProjectsIamPartOf;
100114

101115

102116
// public User(List<Project> projectsShared) {
103117
// this.projectsShared = projectsShared;
104118
// }
105119

106-
public List<Project> getProjectsShared() {
107-
return projectsShared;
120+
// public List<Project> getProjectsShared() {
121+
// return projectsShared;
122+
// }
123+
124+
// public void setProjectsShared(List<Project> projectsShared) {
125+
// this.projectsShared = projectsShared;
126+
// }
127+
128+
public List<Project> getProjectsIamPartOf() {
129+
return ProjectsIamPartOf;
108130
}
109131

110-
public void setProjectsShared(List<Project> projectsShared) {
111-
this.projectsShared = projectsShared;
132+
public void setProjectsIamPartOf(List<Project> projectsIamPartOf) {
133+
ProjectsIamPartOf = projectsIamPartOf;
112134
}
113135

114136
public User(List<Project> projects) {

Full Spring/Day 63/1-Project manager/projectmaneger/src/main/java/com/codingdojo/fs/repositories/ProjectRepository.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@
88
import org.springframework.stereotype.Repository;
99

1010
import com.codingdojo.fs.models.Project;
11+
import com.codingdojo.fs.models.User;
1112

1213
// import com.codingdojo.fs.models.User;
1314
@Repository
1415
public interface ProjectRepository extends CrudRepository<Project, Long> {
1516

1617
List<Project> findAll();
1718

19+
20+
public List<Project> findByMembersContaining(User user);
21+
22+
23+
1824
/*
1925
* Task 1 :
2026
* if the user is not part of the project, return all the projects
@@ -31,12 +37,40 @@ public interface ProjectRepository extends CrudRepository<Project, Long> {
3137
* *
3238
*/
3339

34-
@Query(value = "SELECT projects.id, projects.title, users.first_name , Date(projects.due_date) as due_date , projects.leader_id FROM projects "
35-
+
36-
"INNER JOIN users ON projects.leader_id = users.id " +
37-
"WHERE projects.joinee_id = :id ", nativeQuery = true)
40+
/*
41+
* SELECT * FROM projects p
42+
WHERE p.leader_id <> 2
43+
AND 2 NOT IN (
44+
SELECT joinee_id FROM memebers_projects mp
45+
WHERE mp.project_id = p.id
46+
);
47+
*/
48+
49+
@Query(value = "SELECT p.id, p.title, users.first_name, p.due_date FROM projects p "+
50+
"inner join users on p.leader_id = users.id "+
51+
"WHERE p.leader_id <> :id "+
52+
"AND :id NOT IN ( " +
53+
"SELECT joinee_id FROM memebers_projects mp "+
54+
"WHERE mp.project_id = p.id)",
55+
nativeQuery = true)
56+
List<Object[]> findProjectsNotJoinedByUser(@Param("id") Long id);
57+
58+
59+
60+
61+
62+
@Query(value = "SELECT projects.id, projects.title, projects.descreption, projects.due_date, users.first_name "+
63+
"FROM projects " +
64+
"INNER JOIN memebers_projects ON projects.id = memebers_projects.project_id " +
65+
"INNER JOIN users ON memebers_projects.joinee_id = users.id "+
66+
"WHERE memebers_projects.joinee_id = :id", nativeQuery = true)
3867
List<Object[]> findAllProjectsForUser(@Param("id") Long id);
3968

69+
70+
// works // is Leader + part of
71+
@Query(value = "SELECT projects.id, projects.title, leader.first_name, projects.due_date ,projects.leader_id FROM projects INNER JOIN users AS leader ON projects.leader_id = leader.id LEFT JOIN memebers_projects ON projects.id = memebers_projects.project_id INNER JOIN users ON (projects.leader_id = users.id OR memebers_projects.joinee_id = users.id) WHERE users.id = :id", nativeQuery = true)
72+
List<Object[]> allProjectsUserIsLeader(@Param("id") Long id);
73+
4074
/*
4175
* Task 2 : Get all the projects the user is not a part of
4276
* SELECT

Full Spring/Day 63/1-Project manager/projectmaneger/src/main/java/com/codingdojo/fs/services/ProjectService.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.stereotype.Service;
77

88
import com.codingdojo.fs.models.Project;
9+
import com.codingdojo.fs.models.User;
910
import com.codingdojo.fs.repositories.ProjectRepository;
1011

1112
@Service
@@ -35,11 +36,24 @@ public List<Project> findAllProjects() {
3536
return projectRepo.findAll();
3637
}
3738

38-
public List<Object[]> findAllProjectsForUser1(Long id) {
39+
public List<Object[]> findAllProjectsContainingUser(Long id){
40+
3941
return projectRepo.findAllProjectsForUser(id);
4042
}
4143

42-
public List<Object[]> findallNotInUser(Long id){
43-
return projectRepo.findAllProjectsNotinUser(id);
44+
public List<Object []> allProjectsCreatedByUser(Long id){
45+
return projectRepo.allProjectsUserIsLeader(id);
4446
}
47+
48+
public List<Object[]> findProjectsNotRelatedToUser(Long id){
49+
return projectRepo.findProjectsNotJoinedByUser(id);
50+
}
51+
52+
// public List<Object[]> findAllProjectsForUser1(Long id) {
53+
// return projectRepo.findAllProjectsForUser(id);
54+
// }
55+
56+
// public List<Object[]> findallNotInUser(Long id){
57+
// return projectRepo.findAllProjectsNotinUser(id);
58+
// }
4559
}

0 commit comments

Comments
 (0)