Skip to content

Commit f8cd83e

Browse files
committed
Add user and teacher own courses view
1 parent 6627ca8 commit f8cd83e

File tree

15 files changed

+208
-66
lines changed

15 files changed

+208
-66
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.youdemy.controller;
2+
3+
import com.youdemy.service.UserService;
4+
import org.springframework.ui.Model;
5+
6+
import javax.servlet.http.HttpServletRequest;
7+
import java.security.Principal;
8+
9+
public class BasicAttributes {
10+
11+
public static void addAttributes(Model model, HttpServletRequest request, UserService userService) {
12+
Principal principal = request.getUserPrincipal();
13+
14+
if (principal != null) {
15+
16+
model.addAttribute("logged", true);
17+
model.addAttribute("userName", principal.getName());
18+
model.addAttribute("admin", request.isUserInRole("ADMIN"));
19+
model.addAttribute("teacher", request.isUserInRole("TEACHER"));
20+
model.addAttribute("user", request.isUserInRole("USER"));
21+
model.addAttribute("isTeacherOrAdmin", (request.isUserInRole("ADMIN") || request.isUserInRole("TEACHER")));
22+
model.addAttribute("userId", userService.findByFirstName(principal.getName()).getId());
23+
24+
} else {
25+
model.addAttribute("logged", false);
26+
}
27+
}
28+
29+
}

backend/src/main/java/com/youdemy/controller/CourseController.java

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,7 @@ public class CourseController {
4848

4949
@ModelAttribute
5050
public void addAttributes(Model model, HttpServletRequest request) {
51-
Principal principal = request.getUserPrincipal();
52-
53-
if (principal != null) {
54-
55-
model.addAttribute("logged", true);
56-
model.addAttribute("userName", principal.getName());
57-
model.addAttribute("admin", request.isUserInRole("ADMIN"));
58-
model.addAttribute("teacher", request.isUserInRole("TEACHER"));
59-
model.addAttribute("user", request.isUserInRole("USER"));
60-
model.addAttribute("isTeacherOrAdmin", (request.isUserInRole("ADMIN") || request.isUserInRole("TEACHER")));
61-
62-
} else {
63-
model.addAttribute("logged", false);
64-
}
51+
BasicAttributes.addAttributes(model, request, userService);
6552
}
6653

6754
@GetMapping(value = {
@@ -81,6 +68,45 @@ public String showCourses(Model model,
8168
return "courses";
8269
}
8370

71+
@GetMapping("/user/{userId}")
72+
public String showCourses(Model model,
73+
@PathVariable long userId,
74+
@RequestParam Optional<String> search,
75+
HttpServletRequest request) {
76+
if(model.getAttribute("logged").equals(true)) {
77+
boolean isAdmin = model.getAttribute("admin").equals(true);
78+
Optional<User> user = userRepository.findByFirstName(model.getAttribute("userName").toString());
79+
80+
if (isAdmin) return "redirect:/admin";
81+
82+
if (user.get().getId() != userId) return "redirect:/courses";
83+
84+
if (model.getAttribute("teacher").equals(true)) {
85+
Page<Course> teacherCourses = courseService.findByAuthor(user.get(),
86+
PageRequest.of(0, 6));
87+
88+
model.addAttribute("teacherCourses", teacherCourses);
89+
model.addAttribute("coursesNumResults", teacherCourses.getTotalElements());
90+
model.addAttribute("totalPages", teacherCourses.getTotalPages());
91+
}
92+
93+
if (model.getAttribute("user").equals(true)) {
94+
Page<Course> userCourses = courseService.findByUser(userId,
95+
PageRequest.of(0, 6));
96+
97+
model.addAttribute("courses", userCourses);
98+
model.addAttribute("coursesNumResults", userCourses.getTotalElements());
99+
model.addAttribute("totalPages", userCourses.getTotalPages());
100+
}
101+
102+
model.addAttribute("search", search.orElse(null));
103+
104+
return "myCourses";
105+
}
106+
107+
return "redirect:/courses";
108+
}
109+
84110
@RequestMapping(value = "/page", method = RequestMethod.GET)
85111
@ResponseBody
86112
public Page<Course> getCoursesInPage(@RequestParam Optional<Integer> page,
@@ -100,8 +126,8 @@ public Page<Course> getCurrentCourse(@RequestParam Optional<Integer> page,
100126
return courseService.findByTitle(search.orElse(""),
101127
PageRequest.of(page.orElse(0), 6));
102128
}
103-
104-
129+
130+
105131
@GetMapping("/{id}")
106132
public String showCourse(Model model, @PathVariable long id, HttpServletRequest request) {
107133
Optional<Course> course = courseService.findById(id);
@@ -136,7 +162,7 @@ public String showCourse(Model model, @PathVariable long id, HttpServletRequest
136162
}
137163

138164
model.addAttribute("course", course.get());
139-
165+
140166
return "course";
141167
} else {
142168
return "redirect:/courses";

backend/src/main/java/com/youdemy/controller/HomeController.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,7 @@ public class HomeController {
3939

4040
@ModelAttribute
4141
public void addAttributes(Model model, HttpServletRequest request) {
42-
Principal principal = request.getUserPrincipal();
43-
44-
if (principal != null) {
45-
46-
model.addAttribute("logged", true);
47-
model.addAttribute("userName", principal.getName());
48-
model.addAttribute("admin", request.isUserInRole("ADMIN"));
49-
model.addAttribute("teacher", request.isUserInRole("TEACHER"));
50-
model.addAttribute("user", request.isUserInRole("USER"));
51-
model.addAttribute("isTeacherOrAdmin", (request.isUserInRole("ADMIN") || request.isUserInRole("TEACHER")));
52-
53-
} else {
54-
model.addAttribute("logged", false);
55-
}
42+
BasicAttributes.addAttributes(model, request, userService);
5643
}
5744

5845

backend/src/main/java/com/youdemy/controller/OrderPController.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,10 @@ public class OrderPController {
4949

5050
@Autowired
5151
private UserRepository userRepository;
52-
52+
5353
@ModelAttribute
5454
public void addAttributes(Model model, HttpServletRequest request) {
55-
Principal principal = request.getUserPrincipal();
56-
57-
if (principal != null) {
58-
59-
model.addAttribute("logged", true);
60-
model.addAttribute("userName", principal.getName());
61-
model.addAttribute("admin", request.isUserInRole("ADMIN"));
62-
model.addAttribute("teacher", request.isUserInRole("TEACHER"));
63-
model.addAttribute("user", request.isUserInRole("USER"));
64-
model.addAttribute("isTeacherOrAdmin", (request.isUserInRole("ADMIN") || request.isUserInRole("TEACHER")));
65-
66-
} else {
67-
model.addAttribute("logged", false);
68-
}
55+
BasicAttributes.addAttributes(model, request, userService);
6956
}
7057

7158
@GetMapping(value = {

backend/src/main/java/com/youdemy/controller/UserController.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.youdemy.controller;
22

3+
import com.youdemy.service.UserService;
34
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.security.crypto.password.PasswordEncoder;
56
import org.springframework.stereotype.Controller;
@@ -19,26 +20,16 @@
1920

2021
@Controller
2122
public class UserController {
22-
23+
2324
@Autowired
24-
private UserRepository userRepository;
25+
private UserService userService;
2526

2627
@Autowired
2728
private PasswordEncoder passwordEncoder;
2829

2930
@ModelAttribute
3031
public void addAttributes(Model model, HttpServletRequest request) {
31-
Principal principal = request.getUserPrincipal();
32-
33-
if (principal != null) {
34-
35-
model.addAttribute("logged", true);
36-
model.addAttribute("userName", principal.getName());
37-
model.addAttribute("admin", request.isUserInRole("ADMIN"));
38-
39-
} else {
40-
model.addAttribute("logged", false);
41-
}
32+
BasicAttributes.addAttributes(model, request, userService);
4233
}
4334

4435
@RequestMapping("/signin")
@@ -86,7 +77,7 @@ public String userError() {
8677
@PostMapping("/signup")
8778
public String registerUser(@RequestParam String userFirstName, @RequestParam String userLastName, @RequestParam String userEmail, @RequestParam String userPassword, @RequestParam String userRole) {
8879
User user = new User(userFirstName, userLastName, userEmail, passwordEncoder.encode(userPassword), userRole);
89-
userRepository.save(user);
80+
userService.save(user);
9081
return "signin";
9182
}
9283

backend/src/main/java/com/youdemy/controller/VideoThumbnailController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
import com.youdemy.model.Course;
44
import com.youdemy.model.VideoThumbnail;
55
import com.youdemy.repository.VideoThumbnailRepository;
6+
import com.youdemy.service.UserService;
67
import com.youdemy.service.VideoThumbnailService;
78
import org.springframework.beans.factory.annotation.Autowired;
89
import org.springframework.core.io.ByteArrayResource;
910
import org.springframework.core.io.Resource;
11+
import org.springframework.ui.Model;
1012
import org.springframework.web.bind.annotation.*;
1113
import org.springframework.web.multipart.MultipartFile;
1214

15+
import javax.servlet.http.HttpServletRequest;
1316
import java.io.IOException;
1417
import java.util.Optional;
1518

@@ -19,6 +22,14 @@ public class VideoThumbnailController {
1922
@Autowired
2023
private VideoThumbnailService videoThumbnailService;
2124

25+
@Autowired
26+
private UserService userService;
27+
28+
@ModelAttribute
29+
public void addAttributes(Model model, HttpServletRequest request) {
30+
BasicAttributes.addAttributes(model, request, userService);
31+
}
32+
2233
@PostMapping(value = "/image/new")
2334
public Long uploadVideoThumbnail(@RequestParam("image") MultipartFile image) throws IOException {
2435
VideoThumbnail videoThumbnail = new VideoThumbnail();
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.youdemy.repository;
22

33
import com.youdemy.model.Course;
4+
import com.youdemy.model.User;
45
import org.springframework.data.domain.Page;
56
import org.springframework.data.domain.Pageable;
67
import org.springframework.data.jpa.repository.Query;
@@ -9,6 +10,11 @@
910
public interface CourseRepository extends PagingAndSortingRepository<Course, Long> {
1011

1112
@Query("select c from Course c where c.title like %:title%")
12-
public Page<Course> findByTitle(String title, Pageable pageable);
13+
Page<Course> findByTitle(String title, Pageable pageable);
14+
15+
@Query("select c from Course c inner join OrderP o on c.id = o.course where o.user = :userId")
16+
Page<Course> findByUser(long userId, Pageable pageable);
17+
18+
Page<Course> findByAuthor(User author, Pageable pageable);
1319

1420
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66

7-
public interface LessonRepository extends JpaRepository<Lesson, Long>{}
7+
public interface LessonRepository extends JpaRepository<Lesson, Long>{}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.youdemy.model.User;
88

99

10-
public interface UserRepository extends JpaRepository<User, Long>{
10+
public interface UserRepository extends JpaRepository<User, Long> {
1111

1212
Optional<User> findByFirstName(String firstName);
1313

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ protected void configure(HttpSecurity http) throws Exception {
4040

4141
// User pages
4242
http.authorizeRequests().antMatchers("/courses/new").hasAnyRole("TEACHER", "ADMIN");
43+
http.authorizeRequests().antMatchers("/courses/user/**").hasAnyRole("USER", "TEACHER", "ADMIN");
4344
http.authorizeRequests().antMatchers("/image/**").hasAnyRole("TEACHER", "ADMIN");
4445
http.authorizeRequests().antMatchers("/orders/**").hasAnyRole("USER");
4546
http.authorizeRequests().antMatchers("/admin").hasAnyRole("ADMIN");

0 commit comments

Comments
 (0)