Skip to content

Commit e3fa0e8

Browse files
committed
Finalize Note service
1 parent f414d78 commit e3fa0e8

File tree

8 files changed

+79
-5
lines changed

8 files changed

+79
-5
lines changed

src/main/java/lk/ijse/dep/note/advice/GlobalExceptionHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lk.ijse.dep.note.service.exception.DuplicateEmailException;
44
import lk.ijse.dep.note.service.exception.NotFoundException;
5+
import lk.ijse.dep.note.service.exception.UnauthorizedAccessException;
56
import org.springframework.http.HttpStatus;
67
import org.springframework.web.bind.annotation.ExceptionHandler;
78
import org.springframework.web.bind.annotation.ResponseStatus;
@@ -23,4 +24,10 @@ public String handleNotfoundExcpetion(NotFoundException e){
2324
e.initCause(new ResponseStatusException(HttpStatus.NOT_FOUND,e.getMessage()));
2425
return e.getMessage();
2526
}
27+
@ResponseStatus(HttpStatus.FORBIDDEN)
28+
@ExceptionHandler(UnauthorizedAccessException.class)
29+
public String handleUnAuthorizedAccessException(NotFoundException e){
30+
e.initCause(new ResponseStatusException(HttpStatus.NOT_FOUND,e.getMessage()));
31+
return e.getMessage();
32+
}
2633
}

src/main/java/lk/ijse/dep/note/api/NoteController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.springframework.web.server.ResponseStatusException;
1111
import java.util.List;
1212
@RestController
13-
@RequestMapping("api/v1/users/{userId:[A-F0-9\\-]{36}/notes")
13+
@RequestMapping("/api/v1/users/{userId:[A-Fa-f0-9\\-]{36}}/notes")
1414
public class NoteController {
1515

1616
@Autowired

src/main/java/lk/ijse/dep/note/dto/NoteDTO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
@NoArgsConstructor @AllArgsConstructor @Data
1313
public class NoteDTO implements Serializable {
1414
@Null(message = "Id cannot be set")
15-
private int id;
15+
private Integer id;
1616
@NotBlank(message = "Text cannot be empty")
1717
private String text;
18-
@Pattern(regexp = "[A-Fa-F0-9\\-]{36}",message = "Invalid user id")
18+
@Pattern(regexp = "[A-Fa-f0-9\\-]{36}",message = "Invalid user id")
1919
private String userId;
2020
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package lk.ijse.dep.note.repository.custom;
22

33
import lk.ijse.dep.note.entity.Note;
4+
import lk.ijse.dep.note.entity.User;
45
import lk.ijse.dep.note.repository.CrudRepository;
56

7+
import java.util.List;
8+
69
public interface NoteRepository extends CrudRepository<Note,Integer> {
10+
11+
12+
List<Note> findAllNotesByUser(User user);
713
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package lk.ijse.dep.note.repository.custom.impl;
22

33
import lk.ijse.dep.note.entity.Note;
4+
import lk.ijse.dep.note.entity.User;
45
import lk.ijse.dep.note.repository.CrudRepositoryImpl;
56
import lk.ijse.dep.note.repository.custom.NoteRepository;
67
import org.springframework.stereotype.Repository;
78

9+
import java.util.List;
10+
811
@Repository
912
public class NoteRepositoryImpl extends CrudRepositoryImpl<Note,Integer> implements NoteRepository {
13+
@Override
14+
public List<Note> findAllNotesByUser(User user) {
15+
return entityManager.createQuery("SELECT n FROM Note n WHERE n.user=:user",Note.class).setParameter("user",user).getResultList();
16+
}
1017
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package lk.ijse.dep.note.service.exception;
2+
3+
public class UnauthorizedAccessException extends RuntimeException{
4+
public UnauthorizedAccessException(String message) {
5+
super(message);
6+
}
7+
8+
public UnauthorizedAccessException(String message, Throwable cause) {
9+
super(message, cause);
10+
}
11+
12+
public UnauthorizedAccessException(Throwable cause) {
13+
super(cause);
14+
}
15+
}
Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,62 @@
11
package lk.ijse.dep.note.service.impl;
22

33
import lk.ijse.dep.note.dto.NoteDTO;
4+
import lk.ijse.dep.note.entity.Note;
5+
import lk.ijse.dep.note.entity.User;
46
import lk.ijse.dep.note.repository.custom.NoteRepository;
7+
import lk.ijse.dep.note.repository.custom.UserRepository;
58
import lk.ijse.dep.note.service.Noteservice;
69
import lk.ijse.dep.note.service.exception.NotFoundException;
10+
import lk.ijse.dep.note.service.exception.UnauthorizedAccessException;
11+
import lk.ijse.dep.note.service.util.EntityDTOConverter;
12+
import org.modelmapper.ModelMapper;
713
import org.springframework.beans.factory.annotation.Autowired;
814
import org.springframework.stereotype.Service;
915
import org.springframework.transaction.annotation.Transactional;
1016

1117
import java.util.List;
18+
import java.util.Optional;
19+
import java.util.stream.Collectors;
1220

1321
@Service
1422
@Transactional
1523
public class NoteServiceImpl implements Noteservice {
1624

1725
@Autowired
1826
private NoteRepository noteRepository;
27+
@Autowired
28+
private EntityDTOConverter converter;
29+
@Autowired
30+
private UserRepository userRepository;
1931
@Override
2032
public NoteDTO saveNote(NoteDTO note) throws NotFoundException {
21-
return null;
33+
34+
Note noteEntity = converter.getNoteEntity(note);
35+
noteEntity.setUser(getUser(note.getUserId()));
36+
return converter.getNoteDTO(noteRepository.save(noteEntity));
37+
2238
}
2339

2440
@Override
2541
public void deleteNote(String userId, int noteId) throws NotFoundException {
2642

43+
Optional<Note> opNote = noteRepository.findById(noteId);
44+
if(!opNote.isPresent()) throw new NotFoundException("Invalid Note id");
45+
if(getUser(userId)!=opNote.get().getUser()) throw new UnauthorizedAccessException("User is not authorized to delete this note");
46+
noteRepository.deleteById(noteId);
47+
48+
2749
}
2850

2951
@Override
3052
public List<NoteDTO> getAllNotes(String userId) {
31-
return null;
53+
54+
return noteRepository.findAllNotesByUser(getUser(userId)).stream().map(converter::getNoteDTO).collect(Collectors.toList());
55+
}
56+
57+
private User getUser(String userId){
58+
Optional<User> optUser = userRepository.findById(userId);
59+
if(!optUser.isPresent()) throw new NotFoundException("User Doesnt exist");
60+
return optUser.get();
3261
}
3362
}

src/main/java/lk/ijse/dep/note/service/util/EntityDTOConverter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package lk.ijse.dep.note.service.util;
22

3+
import lk.ijse.dep.note.dto.NoteDTO;
34
import lk.ijse.dep.note.dto.UserDTO;
5+
import lk.ijse.dep.note.entity.Note;
46
import lk.ijse.dep.note.entity.User;
57
import org.modelmapper.ModelMapper;
68
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,4 +23,12 @@ public User getUserEntity(UserDTO user){
2123
public UserDTO getUserDTO(User user){
2224
return mapper.map(user,UserDTO.class);
2325
}
26+
27+
public Note getNoteEntity(NoteDTO noteDTO){
28+
return mapper.map(noteDTO,Note.class);
29+
}
30+
public NoteDTO getNoteDTO(Note noteDTO){
31+
return mapper.typeMap(Note.class,NoteDTO.class).addMapping(note -> note.getUser().getId(),NoteDTO::setUserId).map(noteDTO);
32+
33+
}
2434
}

0 commit comments

Comments
 (0)