Skip to content

Commit ccaedb4

Browse files
committed
Rest User Controller and Rest Course Controller
1 parent 2315ef7 commit ccaedb4

File tree

9 files changed

+196
-52
lines changed

9 files changed

+196
-52
lines changed

backend/src/main/java/com/youdemy/controller/CourseRestController.java renamed to backend/src/main/java/com/youdemy/controller/api/CourseRestController.java

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package com.youdemy.controller;
1+
package com.youdemy.controller.api;
2+
3+
import static org.springframework.web.servlet.support.ServletUriComponentsBuilder.fromCurrentRequest;
24

35
import java.io.File;
46
import java.io.IOException;
@@ -58,11 +60,14 @@ public class CourseRestController {
5860
@Autowired
5961
private UserLoginService userLoginService;
6062

63+
64+
//Get Courses
6165
@GetMapping("/")
6266
public Collection<Course> getCourses() {
6367
return courseService.findAll();
6468
}
6569

70+
//Get Specific Course
6671
@GetMapping("/{id}")
6772
public ResponseEntity<Course> getCourse(@PathVariable long id){
6873
Optional<Course> op = courseService.findById(id);
@@ -75,60 +80,49 @@ public ResponseEntity<Course> getCourse(@PathVariable long id){
7580

7681
}
7782

78-
// @PostMapping("/")
79-
// public ResponseEntity<Course> createcourse(@RequestBody Course course) {
80-
//
81-
// courseService.save(course);
82-
//
83-
// URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(course.getId()).toUri();
84-
//
85-
// return ResponseEntity.created(location).body(course);
86-
// }
8783

84+
//Create Course
8885
@PostMapping("/")
89-
public String postNewCourse(@RequestBody Course newCourse, Model model, HttpServletRequest request) throws IOException {
86+
public ResponseEntity<Course> postNewCourse(@RequestBody Course newCourse, Model model, HttpServletRequest request) throws IOException {
9087

9188
Principal principal = request.getUserPrincipal();
9289

93-
System.out.println("el email del usuario es tallllllllll "+ principal);
94-
95-
if (principal != null) {
96-
User user = userService.findByFirstName(principal.getName());
97-
System.out.println("el email del usuario es tallllllllll "+user.getEmail());
98-
}
99-
100-
101-
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
102-
103-
System.out.println("aquiiiiiiiiiiii "+authentication.getName());
90+
System.out.println("Aquiiiiiiiiii: "+principal);
10491

92+
if(principal != null){
93+
94+
User author = userService.findByFirstName(principal.getName());
95+
96+
newCourse.getLessons().forEach(lesson -> {
97+
lesson.setAuthor(author);
98+
lesson.setCourse(newCourse);
99+
});
105100

106-
User author = userService.findByFirstName(Objects.requireNonNull(authentication.getName()));
101+
newCourse.setAuthor(author);
102+
newCourse.setThumbnail(loadRandomImage());
107103

108104

109-
newCourse.getLessons().forEach(lesson -> {
110-
lesson.setAuthor(author);
111-
lesson.setCourse(newCourse);
112-
});
113-
114-
newCourse.setAuthor(author);
115-
newCourse.setThumbnail(loadRandomImage());
116-
117-
118-
courseService.save(newCourse);
119-
120-
System.out.println(newCourse.getLessons());
121-
return "redirect:/";
105+
courseService.save(newCourse);
106+
107+
System.out.println(newCourse.getLessons());
108+
109+
URI location = fromCurrentRequest().path("/{id}").buildAndExpand(newCourse.getId()).toUri();
110+
return ResponseEntity.created(location).body(newCourse);
111+
112+
113+
}
114+
return null;
122115

123116
}
124117

125118

126-
@PostMapping("/{id}")
127-
public String editCourse(@PathVariable long id, @RequestBody Course newCourse, Model model) throws IOException {
119+
@PutMapping("")
120+
public ResponseEntity<Course> editCourse(@RequestBody Course newCourse) throws IOException {
128121

129122
courseService.save(newCourse);
123+
URI location = fromCurrentRequest().path("/{id}").buildAndExpand(newCourse.getId()).toUri();
124+
return ResponseEntity.created(location).body(newCourse);
130125

131-
return "redirect:/";
132126

133127
}
134128

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.youdemy.controller.api;
2+
3+
import java.net.URI;
4+
import java.security.Principal;
5+
6+
import javax.servlet.http.HttpServletRequest;
7+
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.data.domain.Page;
10+
import org.springframework.http.HttpStatus;
11+
import org.springframework.http.ResponseEntity;
12+
import org.springframework.security.crypto.password.PasswordEncoder;
13+
import org.springframework.web.bind.annotation.DeleteMapping;
14+
import org.springframework.web.bind.annotation.GetMapping;
15+
import org.springframework.web.bind.annotation.PathVariable;
16+
import org.springframework.web.bind.annotation.PostMapping;
17+
import org.springframework.web.bind.annotation.RequestBody;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
import org.springframework.web.bind.annotation.RequestParam;
20+
import org.springframework.web.bind.annotation.RestController;
21+
22+
import com.youdemy.model.User;
23+
import com.youdemy.repository.UserRepository;
24+
import com.youdemy.service.UserService;
25+
26+
import static org.springframework.web.servlet.support.ServletUriComponentsBuilder.fromCurrentRequest;
27+
28+
29+
@RestController
30+
@RequestMapping("/api/users")
31+
public class UserRestController {
32+
33+
@Autowired
34+
private UserRepository userRepository;
35+
36+
@Autowired
37+
private UserService userService;
38+
39+
@Autowired
40+
private PasswordEncoder passwordEncoder;
41+
42+
@GetMapping("/me")
43+
public ResponseEntity<User> me(HttpServletRequest request) {
44+
45+
Principal principal = request.getUserPrincipal();
46+
47+
if(principal != null) {
48+
return ResponseEntity.ok(userRepository.findByFirstName(principal.getName()).orElseThrow());
49+
} else {
50+
return ResponseEntity.notFound().build();
51+
}
52+
}
53+
54+
//get all users
55+
@GetMapping("")
56+
public ResponseEntity<Page<User>> getAllUsers(@RequestParam int page) {
57+
return ResponseEntity.ok(userService.getUsers(page));
58+
}
59+
60+
//get user by id
61+
@GetMapping("/{id}")
62+
public ResponseEntity<User> getUser(@PathVariable long id) {
63+
64+
if (userService.exist(id)) {
65+
User user = userService.findById(id).get();
66+
return new ResponseEntity<>(user, HttpStatus.OK);
67+
} else {
68+
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
69+
}
70+
}
71+
72+
//Register new user
73+
@PostMapping("")
74+
public ResponseEntity<User> registerNewUser(@RequestBody User user) {
75+
if(user.getName().isBlank() || userService.existByEmail(user.getEmail())){
76+
return new ResponseEntity<>(null, HttpStatus.NOT_ACCEPTABLE);
77+
} else {
78+
79+
user.setEncodedPassword(passwordEncoder.encode(user.getEncodedPassword()));
80+
userService.save(user);
81+
URI location = fromCurrentRequest().path("/{id}").buildAndExpand(user.getId()).toUri();
82+
return ResponseEntity.created(location).body(user);
83+
}
84+
}
85+
86+
@DeleteMapping("/{id}")
87+
public ResponseEntity<User> deleteUser(@PathVariable long id) {
88+
89+
if (userService.exist(id)) {
90+
userService.delete(id);
91+
return new ResponseEntity<>(null, HttpStatus.OK);
92+
} else {
93+
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
94+
}
95+
}
96+
97+
98+
99+
}
100+

backend/src/main/java/com/youdemy/model/User.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44

55
import javax.persistence.*;
66

7-
8-
@Entity
7+
@Entity(name = "UserTable")
98
public class User {
109

1110
@Id
1211
@GeneratedValue(strategy = GenerationType.AUTO)
1312
private long id;
1413

14+
@Column(unique = true)
15+
private String email;
16+
1517
private String firstName;
1618
private String lastName;
1719

18-
@Column(unique = true)
19-
private String email;
2020

2121
private String encodedPassword;
2222

@@ -25,10 +25,10 @@ public class User {
2525

2626
public User() {}
2727

28-
public User(String firstName, String lastName, String email, String encodedPassword, String... roles) {
28+
public User(String email, String firstName, String lastName, String encodedPassword, String... roles) {
29+
this.email = email;
2930
this.firstName = firstName;
3031
this.lastName = lastName;
31-
this.email = email;
3232
this.encodedPassword = encodedPassword;
3333
this.roles = List.of(roles);
3434
}
@@ -37,13 +37,23 @@ public long getId() {
3737
return id;
3838
}
3939

40+
public String getName() {
41+
return email;
42+
}
43+
44+
4045
public String getEmail() {
4146
return email;
4247
}
4348

4449
public void setId(long id) {
4550
this.id = id;
4651
}
52+
53+
54+
public void setEmail(String email) {
55+
this.email = email;
56+
}
4757

4858
public String getFirstName() {
4959
return firstName;
@@ -68,5 +78,13 @@ public List<String> getRoles() {
6878
public void setRoles(List<String> roles) {
6979
this.roles = roles;
7080
}
81+
82+
public String getLastName() {
83+
return lastName;
84+
}
85+
86+
public void setLastName(String lastName) {
87+
this.lastName = lastName;
88+
}
7189

7290
}

backend/src/main/java/com/youdemy/repository/UserRepository.java

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

33
import java.util.Optional;
44

5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.Pageable;
57
import org.springframework.data.jpa.repository.JpaRepository;
8+
import org.springframework.data.jpa.repository.Query;
69

710
import com.youdemy.model.User;
811

@@ -12,5 +15,13 @@ public interface UserRepository extends JpaRepository<User, Long> {
1215
Optional<User> findByFirstName(String firstName);
1316

1417
Optional<User> findByEmail(String email);
18+
19+
@Query("SELECT u FROM UserTable u")
20+
public Page<User> findAllUsers(Pageable pageable);
21+
22+
23+
Page<User> findAll(Pageable page);
1524

1625
}
26+
27+

backend/src/main/java/com/youdemy/security/RepositoryUserDetailsService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,9 @@ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundEx
3434
return new org.springframework.security.core.userdetails.User(user.getFirstName(),
3535
user.getEncodedPassword(), roles);
3636
}
37+
38+
39+
40+
3741

3842
}

backend/src/main/java/com/youdemy/security/jwt/JwtRequestFilter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
4242

4343
String username = jwtTokenProvider.getUsername(token);
4444

45+
System.out.println("EL username que se esta usando :"+username);
46+
4547
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
4648

4749
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(

backend/src/main/java/com/youdemy/service/DatabaseInitializer.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ public class DatabaseInitializer {
5252
@PostConstruct
5353
public void init() throws IOException {
5454
// Sample users
55-
User guest = new User("guest", "Guest","gues@mail.com", passwordEncoder.encode("pass2"), "USER");
56-
User user1 = new User("user", "Ramirez","[email protected]", passwordEncoder.encode("pass"), "USER");
57-
User user2 = new User("admin", "Ramirez","[email protected]", passwordEncoder.encode("adminpass"), "USER", "ADMIN");
58-
User user3 = new User("teacher", "Ramirez","[email protected]", passwordEncoder.encode("teacherpass"), "USER", "TEACHER");
59-
User user4 = new User("teacher2", "Ramirez2","[email protected]", passwordEncoder.encode("teacherpass"), "USER", "TEACHER");
55+
User guest = new User("guest@mail.com","guest@mail.com", "Guest", passwordEncoder.encode("pass2"), "USER");
56+
User user1 = new User("user@mail.com", "[email protected]", "Ramirez", passwordEncoder.encode("pass"), "USER");
57+
User user2 = new User("admin@mail.com", "[email protected]", "Ramirez", passwordEncoder.encode("adminpass"), "USER", "ADMIN");
58+
User user3 = new User("teacher@mail.com", "[email protected]", "Ramirez", passwordEncoder.encode("teacherpass"), "USER", "TEACHER");
59+
User user4 = new User("teacher2@mail.com","[email protected]", "Ramirez2", passwordEncoder.encode("teacherpass"), "USER", "TEACHER");
6060

6161

6262
userRepository.save(guest);

backend/src/main/java/com/youdemy/service/UserService.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import com.youdemy.model.User;
55
import com.youdemy.repository.UserRepository;
66
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.data.domain.Page;
8+
import org.springframework.data.domain.PageRequest;
79
import org.springframework.stereotype.Service;
810

11+
import java.awt.print.Pageable;
912
import java.util.List;
1013
import java.util.Optional;
1114

@@ -15,7 +18,7 @@ public class UserService {
1518
@Autowired
1619
private UserRepository userRepository;
1720

18-
public List<User> findAll() {
21+
public List<User> findAll() {
1922
return userRepository.findAll();
2023
}
2124

@@ -34,6 +37,14 @@ public Optional<User> findById(long id) {
3437
public boolean exist(long id) {
3538
return userRepository.existsById(id);
3639
}
40+
41+
public boolean existByEmail(String mail) {
42+
if(userRepository.findByFirstName(mail) == null) {
43+
return true;
44+
}
45+
return false;
46+
}
47+
3748

3849
public void save(User user) {
3950
userRepository.save(user);
@@ -42,4 +53,8 @@ public void save(User user) {
4253
public void delete(long id) {
4354
userRepository.deleteById(id);
4455
}
56+
57+
public Page<User> getUsers(int page) {
58+
return userRepository.findAll(PageRequest.of(page, 3));
59+
}
4560
}

backend/target/classes/META-INF/maven/com.youdemy/Youdemy/pom.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#Generated by Maven Integration for Eclipse
2-
#Sun Mar 27 11:42:50 CEST 2022
2+
#Sun Mar 27 21:15:26 CEST 2022
33
m2e.projectLocation=/Users/emi/Documents/URJC/Web Dev/webapp10/backend
44
m2e.projectName=Youdemy
55
groupId=com.youdemy

0 commit comments

Comments
 (0)