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