Skip to content

Commit 0696b7e

Browse files
committed
Most functional was done!
1 parent 07423a7 commit 0696b7e

File tree

21 files changed

+515
-16
lines changed

21 files changed

+515
-16
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package ru.xpressed.javatemplatescoursework.controller;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.stereotype.Controller;
5+
import org.springframework.ui.Model;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.PathVariable;
8+
import org.springframework.web.bind.annotation.PostMapping;
9+
import ru.xpressed.javatemplatescoursework.entity.Customer;
10+
import ru.xpressed.javatemplatescoursework.entity.Order;
11+
import ru.xpressed.javatemplatescoursework.repository.CustomerRepository;
12+
import ru.xpressed.javatemplatescoursework.repository.OrderRepository;
13+
14+
import javax.servlet.http.HttpServletRequest;
15+
import java.text.SimpleDateFormat;
16+
import java.util.Date;
17+
18+
@Controller
19+
public class AccountController {
20+
@Autowired
21+
CustomerRepository customerRepository;
22+
23+
@Autowired
24+
OrderRepository orderRepository;
25+
26+
@GetMapping("/account")
27+
public String showAccountPage(HttpServletRequest request, Model model) {
28+
model.addAttribute("username", request.getUserPrincipal().getName());
29+
model.addAttribute("linkOutOrUp", "/logout");
30+
model.addAttribute("textOutOrUp", "LogOut");
31+
model.addAttribute("linkInOrAccount", "/account");
32+
model.addAttribute("textInOrAccount", "Account");
33+
model.addAttribute("welcome", "Welcome back, " + request.getUserPrincipal().getName() + "! How's your day?");
34+
model.addAttribute("date", new SimpleDateFormat("dd.MM.y").format(new Date()));
35+
36+
Customer customer = customerRepository.findByUsername(request.getUserPrincipal().getName());
37+
38+
for (Order order : customer.orders) {
39+
if (new Date().compareTo(order.getArrivalDate()) >= 0) {
40+
order.setBtn(1);
41+
} else {
42+
order.setBtn(0);
43+
}
44+
}
45+
46+
model.addAttribute("orders", customer.getOrders());
47+
48+
return "account";
49+
}
50+
51+
@GetMapping("/account/{id}")
52+
public String deleteOrder(@PathVariable int id, HttpServletRequest request, Model model) {
53+
model.addAttribute("username", request.getUserPrincipal().getName());
54+
model.addAttribute("linkOutOrUp", "/logout");
55+
model.addAttribute("textOutOrUp", "LogOut");
56+
model.addAttribute("linkInOrAccount", "/account");
57+
model.addAttribute("textInOrAccount", "Account");
58+
model.addAttribute("welcome", "Welcome back, " + request.getUserPrincipal().getName() + "! How's your day?");
59+
model.addAttribute("date", new SimpleDateFormat("dd.MM.y").format(new Date()));
60+
61+
Customer customer = customerRepository.findByUsername(request.getUserPrincipal().getName());
62+
if (orderRepository.findById(id).isPresent()) {
63+
customer.orders.remove(orderRepository.getById(id));
64+
orderRepository.deleteById(id);
65+
}
66+
customerRepository.save(customer);
67+
68+
for (Order order : customer.orders) {
69+
if (new Date().compareTo(order.getArrivalDate()) >= 0) {
70+
order.setBtn(1);
71+
} else {
72+
order.setBtn(0);
73+
}
74+
}
75+
76+
model.addAttribute("orders", customer.getOrders());
77+
78+
return "account";
79+
}
80+
}

src/main/java/ru/xpressed/javatemplatescoursework/controller/IndexController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package ru.xpressed.javatemplatescoursework.controller;
22

3-
import org.springframework.security.core.userdetails.UsernameNotFoundException;
43
import org.springframework.stereotype.Controller;
54
import org.springframework.ui.Model;
65
import org.springframework.web.bind.annotation.GetMapping;

src/main/java/ru/xpressed/javatemplatescoursework/controller/LogoutController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ public String executeLogout(HttpServletRequest request, HttpServletResponse resp
1717
if (authentication != null) {
1818
new SecurityContextLogoutHandler().logout(request, response, authentication);
1919
}
20-
return "redirect:/login?logout";
20+
return "redirect:/index?logout";
2121
}
2222
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package ru.xpressed.javatemplatescoursework.controller;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.beans.factory.annotation.Value;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.ui.Model;
7+
import org.springframework.validation.BindingResult;
8+
import org.springframework.web.bind.annotation.GetMapping;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import ru.xpressed.javatemplatescoursework.entity.Customer;
11+
import ru.xpressed.javatemplatescoursework.entity.Order;
12+
import ru.xpressed.javatemplatescoursework.repository.CustomerRepository;
13+
14+
import javax.servlet.http.HttpServletRequest;
15+
import javax.validation.Valid;
16+
import java.util.Date;
17+
18+
@Controller
19+
public class OrderController {
20+
@Autowired
21+
CustomerRepository customerRepository;
22+
23+
@GetMapping("/order")
24+
public String showOrderPage(HttpServletRequest request, Model model) {
25+
model.addAttribute("order", new Order());
26+
27+
model.addAttribute("username", request.getUserPrincipal().getName());
28+
model.addAttribute("linkOutOrUp", "/logout");
29+
model.addAttribute("textOutOrUp", "LogOut");
30+
model.addAttribute("linkInOrAccount", "/account");
31+
model.addAttribute("textInOrAccount", "Account");
32+
33+
model.addAttribute("confirm", "false");
34+
model.addAttribute("another", "true");
35+
36+
return "order";
37+
}
38+
39+
@PostMapping("/order")
40+
public String completeOrder(@Valid Order order, BindingResult bindingResult, Model model, HttpServletRequest request) {
41+
model.addAttribute("username", request.getUserPrincipal().getName());
42+
model.addAttribute("linkOutOrUp", "/logout");
43+
model.addAttribute("textOutOrUp", "LogOut");
44+
model.addAttribute("linkInOrAccount", "/account");
45+
model.addAttribute("textInOrAccount", "Account");
46+
47+
if (bindingResult.hasErrors()) {
48+
model.addAttribute("confirm", "false");
49+
model.addAttribute("another", "true");
50+
model.addAttribute(order);
51+
return "order";
52+
}
53+
54+
Customer customer = customerRepository.findByUsername(request.getUserPrincipal().getName());
55+
order.setDeparture(new Date());
56+
order.setCustomer(customer);
57+
58+
customer.orders.add(order);
59+
customerRepository.save(customer);
60+
61+
model.addAttribute("confirm", "true");
62+
model.addAttribute("another", "false");
63+
model.addAttribute("message", "Order confirmed! Courier will be in an hour.");
64+
return "order";
65+
}
66+
}

src/main/java/ru/xpressed/javatemplatescoursework/entity/Customer.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package ru.xpressed.javatemplatescoursework.entity;
22

3-
import com.fasterxml.jackson.annotation.JsonIgnore;
43
import lombok.Getter;
54
import lombok.Setter;
65
import org.springframework.security.core.GrantedAuthority;
76
import org.springframework.security.core.userdetails.UserDetails;
87

98
import javax.persistence.*;
109
import javax.validation.constraints.NotEmpty;
11-
import java.util.Collection;
10+
import javax.validation.constraints.Pattern;
11+
import java.util.*;
1212

1313
@Entity
1414
@Table(name = "user")
@@ -17,6 +17,7 @@
1717
public class Customer implements UserDetails {
1818
@Id
1919
@NotEmpty(message = "Username can not be empty!")
20+
@Pattern(regexp = "^[a-zA-Z0-9]{3,15}$", message = "Only numbers and at least 3 and not more than 15 letters!")
2021
private String username;
2122

2223
@NotEmpty(message = "Password can not be empty!")
@@ -26,6 +27,19 @@ public class Customer implements UserDetails {
2627
@NotEmpty(message = "Repeated password can not be empty!")
2728
private String repeated;
2829

30+
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer", fetch = FetchType.LAZY)
31+
public List<Order> orders = new ArrayList<>();
32+
33+
@Override
34+
public String toString() {
35+
return "Customer{" +
36+
"username='" + username + '\'' +
37+
", password='" + password + '\'' +
38+
", repeated='" + repeated + '\'' +
39+
", orders=" + orders +
40+
'}';
41+
}
42+
2943
@Override
3044
public Collection<? extends GrantedAuthority> getAuthorities() {
3145
return null;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package ru.xpressed.javatemplatescoursework.entity;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
import javax.persistence.*;
7+
import javax.validation.constraints.NotEmpty;
8+
import java.text.SimpleDateFormat;
9+
import java.util.Calendar;
10+
import java.util.Date;
11+
12+
@Entity
13+
@Getter
14+
@Setter
15+
public class Order {
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.AUTO)
18+
private int id;
19+
20+
@NotEmpty(message = "Loading point can not be empty!")
21+
private String load;
22+
23+
@NotEmpty(message = "Destination point can not be empty!")
24+
private String destination;
25+
26+
@NotEmpty(message = "Contact information can not be empty!")
27+
private String contact;
28+
29+
private String info;
30+
31+
private SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.y H:m");
32+
33+
private String departure;
34+
35+
private String arrival;
36+
37+
private Date arrivalDate;
38+
39+
private int btn;
40+
41+
public void setDeparture(Date departure) {
42+
this.departure = dateFormat.format(departure);
43+
44+
Calendar cal = Calendar.getInstance();
45+
cal.setTime(departure);
46+
cal.add(Calendar.MINUTE, 2);
47+
this.arrivalDate = cal.getTime();
48+
this.arrival = dateFormat.format(cal.getTime());
49+
}
50+
51+
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
52+
private Customer customer;
53+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package ru.xpressed.javatemplatescoursework.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.stereotype.Repository;
5+
import ru.xpressed.javatemplatescoursework.entity.Order;
6+
7+
@Repository
8+
public interface OrderRepository extends JpaRepository<Order, Integer> {
9+
}
10+

src/main/java/ru/xpressed/javatemplatescoursework/service/CustomerService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ public class CustomerService implements UserDetailsService {
1515

1616
@Override
1717
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
18-
return customerRepository.findByUsername(username);
18+
Customer customer = customerRepository.findByUsername(username);
19+
20+
if (customer == null)
21+
throw new UsernameNotFoundException("User not found!");
22+
23+
return customer;
1924
}
2025
}
10.9 KB
Loading
3.95 KB
Loading

0 commit comments

Comments
 (0)