source: Git/src/main/java/com/wediscussmovies/project/service/impl/DiscussionServiceImpl.java@ 6f91f99

main
Last change on this file since 6f91f99 was 6f91f99, checked in by Test <matonikolov77@…>, 2 years ago

Refactored reply repository and discussion repository

  • Property mode set to 100644
File size: 6.2 KB
Line 
1package com.wediscussmovies.project.service.impl;
2
3import com.wediscussmovies.project.model.exception.DiscussionNotExistException;
4import com.wediscussmovies.project.model.exception.MovieIdNotFoundException;
5import com.wediscussmovies.project.model.exception.PersonNotExistException;
6import com.wediscussmovies.project.model.exception.UserNotExistException;
7import com.wediscussmovies.project.model.primarykeys.DiscussionLikesPK;
8import com.wediscussmovies.project.model.relation.DiscussionLikes;
9import com.wediscussmovies.project.querymodels.DiscussionLikesQM;
10import com.wediscussmovies.project.repository.*;
11import com.wediscussmovies.project.model.Discussion;
12import com.wediscussmovies.project.model.Movie;
13import com.wediscussmovies.project.model.Person;
14import com.wediscussmovies.project.model.User;
15import com.wediscussmovies.project.service.DiscussionService;
16import org.springframework.stereotype.Service;
17
18import java.sql.Date;
19import java.time.LocalDate;
20import java.util.ArrayList;
21import java.util.List;
22
23@Service
24public class DiscussionServiceImpl implements DiscussionService {
25
26 private final DiscussionRepository discussionRepository;
27 private final DiscussionLikesRepository discussionLikesRepository;
28 private final UserRepository userRepository;
29
30 private final MovieRepository movieRepository;
31 private final PersonRepository personRepository;
32
33 public DiscussionServiceImpl(DiscussionRepository discussionRepository, DiscussionLikesRepository discussionLikesRepository, UserRepository userRepository,
34 MovieRepository movieRepository, PersonRepository personRepository) {
35 this.discussionRepository = discussionRepository;
36 this.discussionLikesRepository = discussionLikesRepository;
37 this.userRepository = userRepository;
38 this.movieRepository = movieRepository;
39 this.personRepository = personRepository;
40 }
41
42
43
44
45 @Override
46 public List<Discussion> listAll() {
47 return this.discussionRepository.findAll();
48 }
49
50 @Override
51 public void save(Character type,Integer id,String title, String text,User user) {
52 Date date = Date.valueOf(LocalDate.now());
53 Discussion discussion;
54
55 if (type.equals('M')) {
56 discussion = new Discussion('M',text,title,date,user);
57 this.addMovieForDiscussion(id,discussion);
58 }
59 else{
60 discussion = new Discussion('P',text,title,date,user);
61 this.addPersonForDiscussion(id,discussion);
62 }
63
64
65
66 discussionRepository.save(discussion);
67 }
68
69 @Override
70 public void edit(Integer discussionId, Character type, Integer id, String title, String text) {
71 Discussion discussion = this.findById(discussionId);
72
73 discussion.setText(text);
74 discussion.setTitle(title);
75 discussion.setType(type);
76 discussion.setMovie(null);
77 discussion.setPerson(null);
78
79 if (type.equals('M')) {
80 this.addMovieForDiscussion(id,discussion);
81 }
82 else{
83 this.addPersonForDiscussion(id,discussion);
84 }
85 this.discussionRepository.save(discussion);
86
87 }
88
89 @Override
90 public void deleteById(Integer discussionId) {
91 this.discussionRepository.deleteById(discussionId);
92 }
93
94 @Override
95 public void likeDiscussion(Integer discussionId, Integer userId) {
96 Discussion discussion = discussionRepository.findById(discussionId).orElseThrow(() -> new DiscussionNotExistException(discussionId));
97 User user = userRepository.findById(userId).orElseThrow(() -> new UserNotExistException(userId.toString()));
98 this.discussionLikesRepository.save(new DiscussionLikes(discussion, user));
99 }
100
101 @Override
102 public List<Discussion> findLikedDiscussionsByUser(User user) {
103 List<DiscussionLikes> likes = discussionLikesRepository.findAllByUser(user);
104 List<Discussion> discussions = new ArrayList<>();
105 for(DiscussionLikes dl: likes){
106 discussions.add(dl.getDiscussion());
107 }
108 return discussions;
109 }
110
111 @Override
112 public void unlikeDiscussion(Integer discussionId, Integer userId) {
113 DiscussionLikesPK pk = new DiscussionLikesPK(discussionId, userId);
114 this.discussionLikesRepository.deleteById(pk);
115 }
116
117 @Override
118 public DiscussionLikesQM findLikesForDiscussionWithId(Integer discussionId) {
119// return discussionRepository.findAllWithLikes().stream().filter(d -> d.getDiscussionId().equals(discussionId)).findFirst().get();
120 return this.discussionRepository.findDiscussionWithLikes(discussionId);
121
122 }
123
124 @Override
125 public void findLikesForAllDiscussions(List<Discussion> discussions) {
126// this.discussionRepository.findAllDiscussionsWithLikes()
127// .forEach(el ->{
128// if (discussions.)
129// });
130 }
131
132
133 @Override
134 public List<Discussion> findAllForPersonOrMovie(Integer id,Character type) {
135 if (type.equals('M'))
136 {
137 Movie movie = this.findMovieById(id);
138 return this.discussionRepository.findAllByMovie(movie);
139 }
140 Person person = this.findPersonById(id);
141 return this.discussionRepository.findAllByPerson(person);
142
143 }
144
145 @Override
146 public Discussion findById(Integer id) {
147 return discussionRepository.findById(id).orElseThrow(() -> new DiscussionNotExistException(id));
148 }
149
150 @Override
151 public List<Discussion> listAllByTitle(String title) {
152 if(title == null || title.isEmpty())
153 return this.listAll();
154 return discussionRepository.findAllByTitleLike("%"+title+"%");
155 }
156 private void addMovieForDiscussion(Integer id,Discussion discussion){
157 Movie movie = findMovieById(id);
158 discussion.setMovie(movie);
159
160 }
161
162 private void addPersonForDiscussion(Integer id, Discussion discussion){
163 Person person = findPersonById(id);
164 discussion.setPerson(person);
165
166 }
167 private Movie findMovieById(Integer id){
168 return this.movieRepository.findById(id).orElseThrow(() -> new MovieIdNotFoundException(id));
169 }
170 private Person findPersonById(Integer id){
171 return this.personRepository.findById(id).orElseThrow(() -> new PersonNotExistException(id));
172
173 }
174}
Note: See TracBrowser for help on using the repository browser.