source: Git/src/main/java/com/wediscussmovies/project/web/controller/DiscussionController.java@ c02189f

main
Last change on this file since c02189f was c02189f, checked in by Petar Partaloski <ppartaloski@…>, 2 years ago

Added new core functionalities, fixed bugs and improved visual clarity

  • Property mode set to 100644
File size: 6.9 KB
Line 
1package com.wediscussmovies.project.web.controller;
2
3import com.wediscussmovies.project.LoggedUser;
4import com.wediscussmovies.project.model.Discussion;
5import com.wediscussmovies.project.model.Reply;
6import com.wediscussmovies.project.model.User;
7import com.wediscussmovies.project.model.relation.DiscussionLikes;
8import com.wediscussmovies.project.service.DiscussionService;
9import com.wediscussmovies.project.service.MovieService;
10import com.wediscussmovies.project.service.PersonService;
11import com.wediscussmovies.project.service.ReplyService;
12import org.springframework.security.authentication.AnonymousAuthenticationToken;
13import org.springframework.security.core.Authentication;
14import org.springframework.security.core.context.SecurityContextHolder;
15import org.springframework.security.core.userdetails.UserDetails;
16import org.springframework.stereotype.Controller;
17import org.springframework.ui.Model;
18import org.springframework.web.bind.annotation.*;
19
20import java.util.ArrayList;
21import java.util.List;
22
23@Controller
24@RequestMapping("/discussions")
25public class DiscussionController {
26
27 private final DiscussionService discussionService;
28 private final ReplyService replyService;
29 private final MovieService movieService;
30 private final PersonService personService;
31
32 public DiscussionController(DiscussionService discussionService, ReplyService replyService, MovieService movieService, PersonService personService) {
33 this.discussionService = discussionService;
34 this.replyService = replyService;
35 this.movieService = movieService;
36 this.personService = personService;
37 }
38
39 @GetMapping()
40 public String getDiscussions(@RequestParam(required = false) String titleSearch,
41 Model model){
42 /* 1.Validacija i na frontend so, da ne se isprakja baranjeto, ako titleSearch e null ili empty
43 da ne se preoptovaruva serverot so baranja za titleSearch koga e null!
44
45 */
46 List<Discussion> discussions = discussionService.listAllByTitle(titleSearch);
47 model.addAttribute("discussions", discussions);
48 model.addAttribute("contentTemplate", "discussionsList");
49 model.addAttribute("user",LoggedUser.getLoggedUser());
50 this.addModelPropertiesForUser(model);
51 this.addModelPropertiesLikes(model,null, discussions);
52 return "template";
53 }
54
55 @GetMapping("/{id}")
56 public String getDiscussion(
57 @PathVariable Integer id,
58 Model model){
59 /*
60 2. Moze da se vrati indikator deka takva diskusija ne postoi! - postaveno
61 */
62 try {
63 Discussion disc = discussionService.findById(id);
64 model.addAttribute("disc", disc);
65 model.addAttribute("contentTemplate", "discussion");
66 model.addAttribute("user",LoggedUser.getLoggedUser());
67 model.addAttribute("replies",this.replyService.findAllByDiscussion(disc));
68 addModelPropertiesLikes(model, disc, null);
69 addModelPropertiesForUser(model);
70
71 return "template";
72 }
73 catch (RuntimeException exception){
74 return "redirect:/discussions?error="+exception.getMessage();
75
76 }
77 }
78 @GetMapping("/all/{id}")
79 public String getDiscussionForId(@PathVariable Integer id,@RequestParam Character type, Model model){
80
81 model.addAttribute("discussions", this.discussionService.findAllForPersonOrMovie(id,type));
82 model.addAttribute("contentTemplate", "discussionForType");
83 return "template";
84
85 }
86
87 @GetMapping("/{id}/replies")
88 public String getRepliesToDiscussion(
89 @PathVariable Integer id,
90 Model model){
91
92 try {
93 Discussion discussion = discussionService.findById(id);
94 model.addAttribute("discussion", discussion);
95 model.addAttribute("contentTemplate", "discussionReply");
96 return "template";
97 }
98 catch (RuntimeException exception){
99 return "redirect:/discussions?error="+exception.getMessage();
100
101 }
102
103 }
104
105
106 @GetMapping("/add/{id}")
107 public String getFormForEdit(Model model,
108 @PathVariable Integer id)
109 {
110 Discussion discussion = this.discussionService.findById(id);
111 setModelPropertiesForForm(model);
112 model.addAttribute("discussion", discussion);
113
114 return "template";
115 }
116 @GetMapping("/add")
117 public String getFormForAdd(Model model)
118 {
119 setModelPropertiesForForm(model);
120
121 return "template";
122 }
123
124
125 @PostMapping("/save")
126 public String saveDiscussion(
127 @RequestParam Integer idDiscussed,
128 @RequestParam String title,
129 @RequestParam String text,
130 @RequestParam Character type ){
131
132
133
134 try{
135
136 discussionService.save(type,idDiscussed, title, text, LoggedUser.getLoggedUser());
137 return "redirect:/discussions";
138
139 }
140
141 catch (RuntimeException exc){
142 return "redirect:/discussions?error="+exc.getMessage();
143
144 }
145 }
146
147 @PostMapping("/save/{discussionId}/")
148 public String editDiscussion(
149 @PathVariable Integer discussionId,
150 @RequestParam String title,
151 @RequestParam String text,
152 @RequestParam Character type,
153 @RequestParam Integer idDiscussed
154 ){
155
156
157
158
159 try{
160
161
162 discussionService.edit(discussionId,type,idDiscussed, title, text);
163 return "redirect:/discussions";
164
165 }
166
167 catch (RuntimeException exc){
168 return "redirect:/discussions?error="+exc.getMessage();
169
170 }
171 }
172
173 private void setModelPropertiesForForm(Model model){
174 model.addAttribute("movies",this.movieService.listAll());
175 model.addAttribute("persons",this.personService.findAll());
176 model.addAttribute("contentTemplate", "discussionsAdd");
177
178 }
179 private void addModelPropertiesForUser(Model model){
180 User user = LoggedUser.getLoggedUser();
181 model.addAttribute("likedDiscussions",this.discussionService.findLikedDiscussionsByUser(user));
182 model.addAttribute("user",user);
183 }
184 private void addModelPropertiesLikes(Model model, Discussion discussion, List<Discussion> discussions){
185 if(discussion==null){
186 List<com.wediscussmovies.project.querymodels.DiscussionLikes> discussionLikes = new ArrayList<>();
187 for(Discussion d: discussions){
188 discussionLikes.add(discussionService.findLikesForDiscussionWithId(d.getDiscussionId()));
189 }
190 model.addAttribute("likes", discussionLikes);
191 }
192 else{
193 model.addAttribute("likes",discussionService.findLikesForDiscussionWithId(discussion.getDiscussionId()).getLikes());
194 }
195 }
196
197
198}
Note: See TracBrowser for help on using the repository browser.