source: Git/Sources/src/main/java/com/wediscussmovies/project/service/impl/DiscussionServiceImpl.java@ 980eeda

main
Last change on this file since 980eeda was 980eeda, checked in by Test <matonikolov77@…>, 22 months ago

Restructuring project

  • Property mode set to 100644
File size: 6.6 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.time.LocalDate;
19import java.util.ArrayList;
20import java.util.List;
21import java.util.concurrent.atomic.AtomicInteger;
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 List<Discussion> discussions = this.discussionRepository.findAll();
48 List<DiscussionLikesQM> discussionLikes = this.discussionRepository.findAllDiscussionsWithLikes();
49 for (int i = 0; i < discussionLikes.size(); i++){
50 discussions.get(i).setLikes(discussionLikes.get(i).getLikes());
51 }
52 return discussions;
53 }
54
55 @Override
56 public void save(Character type,Integer id,String title, String text,User user) {
57 LocalDate date = LocalDate.now();
58 Discussion discussion;
59
60 if (type.equals('M')) {
61 discussion = new Discussion('M',text,title,date,user);
62 this.addMovieForDiscussion(id,discussion);
63 }
64 else{
65 discussion = new Discussion('P',text,title,date,user);
66 this.addPersonForDiscussion(id,discussion);
67 }
68
69
70
71 discussionRepository.save(discussion);
72 }
73
74 @Override
75 public void edit(Integer discussionId, Character type, Integer id, String title, String text) {
76 Discussion discussion = this.findById(discussionId);
77
78 discussion.setText(text);
79 discussion.setTitle(title);
80 discussion.setType(type);
81 discussion.setMovie(null);
82 discussion.setPerson(null);
83
84 if (type.equals('M')) {
85 this.addMovieForDiscussion(id,discussion);
86 }
87 else{
88 this.addPersonForDiscussion(id,discussion);
89 }
90 this.discussionRepository.save(discussion);
91
92 }
93
94 @Override
95 public void deleteById(Integer discussionId) {
96 this.discussionRepository.deleteById(discussionId);
97 }
98
99 @Override
100 public void likeDiscussion(Integer discussionId, Integer userId) {
101 Discussion discussion = discussionRepository.findById(discussionId).orElseThrow(() -> new DiscussionNotExistException(discussionId));
102 User user = userRepository.findById(userId).orElseThrow(() -> new UserNotExistException(userId.toString()));
103 this.discussionLikesRepository.save(new DiscussionLikes(discussion, user));
104 }
105
106 @Override
107 public List<Discussion> findLikedDiscussionsByUser(User user) {
108 List<DiscussionLikes> likes = discussionLikesRepository.findAllByUser(user);
109 List<Discussion> discussions = new ArrayList<>();
110 for(DiscussionLikes dl: likes){
111 discussions.add(dl.getDiscussion());
112 }
113 return discussions;
114 }
115
116 @Override
117 public void unlikeDiscussion(Integer discussionId, Integer userId) {
118 DiscussionLikesPK pk = new DiscussionLikesPK(discussionId, userId);
119 this.discussionLikesRepository.deleteById(pk);
120 }
121
122 @Override
123 public DiscussionLikesQM findLikesForDiscussionWithId(Integer discussionId) {
124// return discussionRepository.findAllWithLikes().stream().filter(d -> d.getDiscussionId().equals(discussionId)).findFirst().get();
125 return this.discussionRepository.findDiscussionWithLikes(discussionId);
126
127 }
128
129 @Override
130 public List<DiscussionLikesQM> findLikesForAllDiscussions() {
131 // return this.discussionRepository.findAllDiscussionsWithLikes();
132 return this.discussionRepository.findAllDiscussionsWithLikes();
133 }
134
135
136 @Override
137 public List<Discussion> findAllForPersonOrMovie(Integer id,Character type) {
138 if (type.equals('M'))
139 {
140 Movie movie = this.findMovieById(id);
141 return this.discussionRepository.findAllByMovie(movie);
142 }
143 Person person = this.findPersonById(id);
144 return this.discussionRepository.findAllByPerson(person);
145
146 }
147
148 @Override
149 public Discussion findById(Integer id) {
150 Discussion disc = discussionRepository.findById(id).orElseThrow(() -> new DiscussionNotExistException(id));
151 disc.setLikes(this.discussionRepository.findDiscussionWithLikes(id).getLikes());
152 return disc;
153 }
154
155 @Override
156 public List<Discussion> listAllByTitle(String title) {
157 if(title == null || title.isEmpty())
158 return this.listAll();
159 return discussionRepository.findAllByTitleLike("%"+title+"%");
160 }
161 private void addMovieForDiscussion(Integer id,Discussion discussion){
162 Movie movie = findMovieById(id);
163 discussion.setMovie(movie);
164
165 }
166
167 private void addPersonForDiscussion(Integer id, Discussion discussion){
168 Person person = findPersonById(id);
169 discussion.setPerson(person);
170
171 }
172 private Movie findMovieById(Integer id){
173 return this.movieRepository.findById(id).orElseThrow(() -> new MovieIdNotFoundException(id));
174 }
175 private Person findPersonById(Integer id){
176 return this.personRepository.findById(id).orElseThrow(() -> new PersonNotExistException(id));
177
178 }
179}
Note: See TracBrowser for help on using the repository browser.