Skip to content

Commit 52b8b6d

Browse files
committed
Changed the output of pages at startup, and added the ability for the user to add, edit, and delete todo. Changed font colors when displaying the message. Corrected the authorization and registration form. And much more.
1 parent 0b30383 commit 52b8b6d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+846
-133
lines changed

.idea/compiler.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 76 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/org/example/argen/configuration/WebSecurityConfig.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
@EnableWebSecurity
1717
@EnableGlobalMethodSecurity(prePostEnabled = true)
1818
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
19+
1920
@Autowired
2021
private UserServiceImpl userServiceImpl;
2122

@@ -36,9 +37,11 @@ protected void configure(HttpSecurity http) throws Exception {
3637
.and()
3738
.formLogin()
3839
.loginPage("/login")
39-
.permitAll()
40+
.defaultSuccessUrl("/main", true)
41+
.permitAll()
4042
.and()
4143
.logout()
44+
.logoutSuccessUrl("/")
4245
.permitAll();
4346
}
4447

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.example.argen.constants;
2+
3+
public final class Constants {
4+
5+
public static final String TODO_ERROR_EDIT = "TODO_ERROR_EDIT";
6+
public static final String CANT_EDIT_TODO = "You can't edit this todo!";
7+
public static final String TODO_ERROR_DELETE = "TODO_ERROR_DELETE";
8+
public static final String CANT_DELETE_TODO = "You can't delete this todo!";
9+
public static final String USER_ERROR_ADD = "USER_ERROR_ADD";
10+
public static final String CANT_ADD_NEW_USER = "There is already a user with this username, enter a different username!";
11+
12+
}

src/main/java/org/example/argen/controller/AdminController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ public class AdminController {
1818
@Autowired
1919
private UserServiceImpl userServiceImpl;
2020

21-
2221
@PreAuthorize("hasAuthority('ADMIN')")
2322
@GetMapping
2423
public String userList(Model model) {
2524
model.addAttribute("users", userServiceImpl.findAllUsers());
26-
27-
return "userList";
25+
return "user/userList";
2826
}
2927

3028

@@ -33,7 +31,7 @@ public String userList(Model model) {
3331
public String userEditForm(@PathVariable User user, Model model) {
3432
model.addAttribute("user", user);
3533
model.addAttribute("roles", Role.values());
36-
return "userEdit";
34+
return "user/userEdit";
3735
}
3836

3937

@@ -47,4 +45,5 @@ public String userSave(
4745
userServiceImpl.saveUser(user,active, form);
4846
return "redirect:/user";
4947
}
48+
5049
}

src/main/java/org/example/argen/controller/MainController.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,28 @@
33
import org.springframework.stereotype.Controller;
44
import org.springframework.web.bind.annotation.GetMapping;
55

6-
import java.util.Map;
76

87
@Controller
98
public class MainController {
109

1110
@GetMapping("/")
12-
public String greeting(Map<String, Object> model) {
11+
public String greeting() {
1312
return "greeting";
1413
}
1514

1615
@GetMapping("/main")
17-
public String mainPage(Map<String, Object> model) {
16+
public String mainPage() {
1817
return "main";
1918
}
2019

20+
/* @GetMapping("/todoEdit")
21+
public String todoEdit() {
22+
return "todo/todoEdit";
23+
}
24+
25+
@GetMapping("/todoDelete")
26+
public String todoDelete() {
27+
return "todo/todoDelete";
28+
}*/
2129

2230
}

src/main/java/org/example/argen/controller/RegistrationController.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010

1111
import javax.validation.Valid;
1212

13+
import static org.example.argen.constants.Constants.CANT_ADD_NEW_USER;
14+
import static org.example.argen.constants.Constants.USER_ERROR_ADD;
15+
1316
@Controller
1417
public class RegistrationController {
1518

@@ -25,7 +28,7 @@ public String registration() {
2528
public String registerUser(@Valid User user, Model model) {
2629

2730
if (!userServiceImpl.registerUser(user)) {
28-
model.addAttribute("usernameError", "This user exists, enter a different user name");
31+
model.addAttribute(USER_ERROR_ADD, CANT_ADD_NEW_USER);
2932
return "registration";
3033
}
3134
return "redirect:/login";
Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,92 @@
11
package org.example.argen.controller;
22

3+
import org.example.argen.entity.Todo;
4+
import org.example.argen.entity.User;
5+
import org.example.argen.enums.Status;
6+
import org.example.argen.repository.TodoRepository;
7+
import org.example.argen.serviceImp.TodoServiceImpl;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.security.access.prepost.PreAuthorize;
10+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
311
import org.springframework.stereotype.Controller;
4-
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.transaction.annotation.Transactional;
13+
import org.springframework.ui.Model;
14+
import org.springframework.web.bind.annotation.*;
15+
import org.springframework.web.servlet.ModelAndView;
16+
17+
import javax.validation.Valid;
18+
19+
import static org.example.argen.constants.Constants.*;
520

621
@Controller
722
@RequestMapping("/todo")
823
public class TodoController {
24+
25+
@Autowired
26+
private TodoServiceImpl todoService;
27+
28+
@Autowired
29+
private TodoRepository todoRepository;
30+
31+
@GetMapping()
32+
public ModelAndView todoList(@AuthenticationPrincipal User user) {
33+
return new ModelAndView("todo/todoList")
34+
.addObject("newTodo", todoService.listTodo(Status.NEW, user))
35+
.addObject("doingTodo", todoService.listTodo(Status.DOING, user))
36+
.addObject("doneTodo", todoService.listTodo(Status.DONE, user));
37+
}
38+
39+
@PreAuthorize("hasAuthority('USER')")
40+
@PostMapping("todoList")
41+
public String addNewTodo(@AuthenticationPrincipal User user, @Valid Todo todo) {
42+
todoService.addNewTodo(user, todo);
43+
return "redirect:/todo";
44+
}
45+
46+
47+
@PreAuthorize("hasAuthority('USER')")
48+
@GetMapping("{id}")
49+
public String todoEditForm(@PathVariable Long id, Model model) {
50+
Todo todo = todoService.findTodoById(id);
51+
model.addAttribute("todo", todo);
52+
return "todo/todoEdit";
53+
}
54+
55+
56+
@PreAuthorize("hasAuthority('USER')")
57+
@PostMapping()
58+
public String saveTodo(
59+
@AuthenticationPrincipal User user,
60+
@RequestParam("todoId") Long id,
61+
@RequestParam String title,
62+
@RequestParam String description,
63+
@RequestParam Status status,
64+
Model model
65+
66+
) {
67+
Todo todo = todoService.findTodoById(id);
68+
if (!todoService.saveTodo(user, todo, title, description, status)){
69+
model.addAttribute(TODO_ERROR_EDIT, CANT_EDIT_TODO);
70+
return "todo/todoEdit";
71+
}
72+
return "redirect:/todo";
73+
}
74+
75+
76+
@PreAuthorize("hasAuthority('USER')")
77+
@PostMapping("deleteTodo")
78+
@Transactional
79+
public String deleteTodo(
80+
@AuthenticationPrincipal User user,
81+
@RequestParam("todoId") Long id,
82+
Model model
83+
) {
84+
Todo todo = todoService.findTodoById(id);
85+
if (!todoService.deleteTodo(user, todo)) {
86+
model.addAttribute(TODO_ERROR_DELETE, CANT_DELETE_TODO);
87+
return "todo/todoEdit";
88+
}
89+
return "redirect:/todo";
90+
}
91+
992
}

src/main/java/org/example/argen/entity/Todo.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.example.argen.entity;
22

3+
import lombok.Data;
34
import lombok.Getter;
45
import lombok.Setter;
56
import org.example.argen.enums.Status;
@@ -8,9 +9,7 @@
89
import java.time.LocalDateTime;
910

1011
@Entity
11-
@Table(name = "users")
12-
@Getter
13-
@Setter
12+
@Table(name = "todo")
1413
public class Todo {
1514
@Id
1615
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -26,4 +25,52 @@ public class Todo {
2625
@ManyToOne(fetch = FetchType.EAGER)
2726
@JoinColumn(name = "user_id")
2827
private User author;
28+
29+
public Long getId() {
30+
return id;
31+
}
32+
33+
public void setId(Long id) {
34+
this.id = id;
35+
}
36+
37+
public LocalDateTime getCreateDate() {
38+
return createDate;
39+
}
40+
41+
public void setCreateDate(LocalDateTime createDate) {
42+
this.createDate = createDate;
43+
}
44+
45+
public String getTitle() {
46+
return title;
47+
}
48+
49+
public void setTitle(String title) {
50+
this.title = title;
51+
}
52+
53+
public String getDescription() {
54+
return description;
55+
}
56+
57+
public void setDescription(String description) {
58+
this.description = description;
59+
}
60+
61+
public Status getStatus() {
62+
return status;
63+
}
64+
65+
public void setStatus(Status status) {
66+
this.status = status;
67+
}
68+
69+
public User getAuthor() {
70+
return author;
71+
}
72+
73+
public void setAuthor(User author) {
74+
this.author = author;
75+
}
2976
}

src/main/java/org/example/argen/enums/Role.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import org.springframework.security.core.GrantedAuthority;
44

55
public enum Role implements GrantedAuthority {
6-
USER, ADMIN;
6+
USER,
7+
ADMIN;
78

89
@Override
910
public String getAuthority() {

0 commit comments

Comments
 (0)