mirror of
https://github.com/st-tu-dresden-praktikum/swt23w23
synced 2024-07-19 21:04:36 +02:00
Implement staff with salespoint
Co-authored-by: Eren Asker <eren.asker@mailbox.tu-dresden.de>
This commit is contained in:
parent
eccff8d2b0
commit
6759841742
|
@ -1,20 +1,28 @@
|
|||
package catering.staff;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
|
||||
import org.springframework.data.domain.AbstractAggregateRoot;
|
||||
|
||||
@Entity
|
||||
public class Staff {
|
||||
|
||||
private int id;
|
||||
private String surname;
|
||||
private String name;
|
||||
private String job;
|
||||
private String surname, name, job;
|
||||
private @Id @GeneratedValue Long id;
|
||||
|
||||
protected Staff() {
|
||||
// No-argument constructor for JPA
|
||||
}
|
||||
|
||||
public Staff(String name, String surname, String job) {
|
||||
this.id = (int) (Math.random() * 10 * Math.random() * 10 + Math.random() * 10);
|
||||
this.name = name;
|
||||
this.surname = surname;
|
||||
this.job = job;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
|
@ -30,10 +38,6 @@ public class Staff {
|
|||
return job;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void setSurname(String surname) {
|
||||
this.surname = surname;
|
||||
}
|
||||
|
@ -45,5 +49,4 @@ public class Staff {
|
|||
public void setJob(String job) {
|
||||
this.job = job;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,55 +1,70 @@
|
|||
package catering.staff;
|
||||
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import org.springframework.ui.Model;
|
||||
|
||||
@Controller
|
||||
public class StaffController {
|
||||
|
||||
private final StaffRepository staffRepository;
|
||||
private final StaffManagement staffManagement;
|
||||
|
||||
public StaffController(StaffRepository staffRepository) {
|
||||
this.staffRepository = staffRepository;
|
||||
public StaffController(StaffManagement staffManagement) {
|
||||
this.staffManagement = staffManagement;
|
||||
}
|
||||
|
||||
@GetMapping("/staff")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String getStaff(Model model) {
|
||||
model.addAttribute("title", "Personalverwaltung");
|
||||
model.addAttribute("staffs", staffRepository.getStaffs());
|
||||
model.addAttribute("staff", staffManagement.findAll());
|
||||
return "staff";
|
||||
}
|
||||
|
||||
@PostMapping("/staff/remove")
|
||||
public String removeStaff(@RequestParam("staffID") int staffID, Model model) {
|
||||
staffRepository.removeStaff(staffID);
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String removeStaff(@RequestParam("staffID") Staff staff, Model model) {
|
||||
staffManagement.deleteStaff(staff.getId());
|
||||
return "redirect:/staff";
|
||||
}
|
||||
|
||||
@PostMapping("/staff/add")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String addStaff(
|
||||
@RequestParam String name,
|
||||
@RequestParam String surname,
|
||||
@RequestParam String job,
|
||||
Model model) {
|
||||
@RequestParam String name,
|
||||
@RequestParam String surname,
|
||||
@RequestParam String job,
|
||||
Model model
|
||||
) {
|
||||
Staff newStaff = new Staff(name, surname, job);
|
||||
staffRepository.save(newStaff);
|
||||
staffManagement.save(newStaff);
|
||||
return "redirect:/staff";
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/staff/edit/{id}")
|
||||
public String editStaff(@PathVariable("id") int id, Model model) {
|
||||
staffRepository.findById(id).ifPresent(staff -> model.addAttribute("staff", staff));
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String editStaff(@PathVariable("id") Staff staff, Model model) {
|
||||
model.addAttribute("staff", staff);
|
||||
return "edit-staff";
|
||||
}
|
||||
|
||||
@PostMapping("/staff/update")
|
||||
public String updateStaff(@ModelAttribute Staff staff) {
|
||||
staffRepository.save(staff);
|
||||
@PostMapping("/staff/edit/{id}")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String updateStaff(
|
||||
@PathVariable("id") Staff staff,
|
||||
@RequestParam String name,
|
||||
@RequestParam String surname,
|
||||
@RequestParam String job
|
||||
) {
|
||||
staff.setJob(job);
|
||||
staff.setName(name);
|
||||
staff.setSurname(surname);
|
||||
staffManagement.save(staff);
|
||||
return "redirect:/staff";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
package catering.staff;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
|
||||
@Component
|
||||
|
||||
public class StaffDataInitializer {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(StaffDataInitializer.class);
|
||||
|
||||
private final StaffRepository staffRepository;
|
||||
|
||||
public StaffDataInitializer(StaffRepository staffRepository) {
|
||||
Assert.notNull(staffRepository, "StaffRepository must not be null!");
|
||||
this.staffRepository = staffRepository;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void initialize() {
|
||||
|
||||
LOG.info("Creating default staff.");
|
||||
|
||||
staffRepository.save(new Staff("Max", "Musterkoch", "Koch"));
|
||||
staffRepository.save(new Staff("Julia", "Musterfrau", "Servicekraft"));
|
||||
|
||||
LOG.info("Default staff created");
|
||||
|
||||
}
|
||||
}
|
39
src/main/java/catering/staff/StaffManagement.java
Normal file
39
src/main/java/catering/staff/StaffManagement.java
Normal file
|
@ -0,0 +1,39 @@
|
|||
package catering.staff;
|
||||
|
||||
import java.util.Optional;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.SessionAttributes;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Transactional
|
||||
@SessionAttributes("staff")
|
||||
public class StaffManagement {
|
||||
|
||||
private final StaffRepository staffRepository;
|
||||
|
||||
public StaffManagement(StaffRepository staffRepository) {
|
||||
this.staffRepository = staffRepository;
|
||||
}
|
||||
|
||||
public Staff addStaff(Staff staff) {
|
||||
return staffRepository.save(staff);
|
||||
}
|
||||
|
||||
public Optional<Staff> findById(Long staffID) {
|
||||
return staffRepository.findById(staffID);
|
||||
}
|
||||
|
||||
public void save(Staff staff) {
|
||||
staffRepository.save(staff);
|
||||
}
|
||||
|
||||
public Iterable<Staff> findAll() {
|
||||
return staffRepository.findAll();
|
||||
}
|
||||
|
||||
public void deleteStaff(Long staffID) {
|
||||
staffRepository.deleteById(staffID);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,53 +1,10 @@
|
|||
package catering.staff;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.data.util.Streamable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Component
|
||||
public class StaffRepository {
|
||||
|
||||
private Set<Staff> staffs = new HashSet<>();
|
||||
|
||||
public StaffRepository() {
|
||||
}
|
||||
|
||||
public boolean addStaff(Staff staff) {
|
||||
return this.staffs.add(staff);
|
||||
}
|
||||
|
||||
private int nextId = (int) (Math.random() * 10 * Math.random() * 10 + Math.random() * 10);
|
||||
|
||||
public void save(Staff staff) {
|
||||
|
||||
if (staff.getId() == 0) {
|
||||
staff.setId(nextId++);
|
||||
} else {
|
||||
|
||||
this.staffs.removeIf(p -> p.getId() == staff.getId());
|
||||
}
|
||||
|
||||
this.staffs.add(staff);
|
||||
}
|
||||
|
||||
public long count() {
|
||||
return this.staffs.size();
|
||||
}
|
||||
|
||||
public boolean removeStaff(int staffID) {
|
||||
return this.staffs.removeIf(staff -> staff.getId() == staffID);
|
||||
}
|
||||
|
||||
public Collection<Staff> getStaffs() {
|
||||
return new ArrayList<>(this.staffs);
|
||||
}
|
||||
|
||||
public Optional<Staff> findById(int id) {
|
||||
return this.staffs.stream().filter(staff -> staff.getId() == id).findFirst();
|
||||
}
|
||||
interface StaffRepository extends CrudRepository<Staff, Long> {
|
||||
|
||||
@Override
|
||||
Streamable<Staff> findAll();
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<form th:action="@{/staff/update}" th:object="${staff}" method="post">
|
||||
<form th:object="${staff}" method="post">
|
||||
<input type="hidden" th:field="*{id}" />
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="name">Name:</label>
|
||||
|
|
|
@ -1,31 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org"
|
||||
<html
|
||||
xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.html(title='Angestellte')}">
|
||||
<head>
|
||||
</head>
|
||||
layout:decorate="~{layout.html(title='Angestellte')}"
|
||||
>
|
||||
<head> </head>
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<div>
|
||||
<h2>Mitarbeiterdetails</h2>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Nachname</th>
|
||||
<th>Vorname</th>
|
||||
<th>Beruf</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
<tr th:each="staff : ${staffs}">
|
||||
<td th:text="${staff.id}">01</td>
|
||||
<td th:text="${staff.surname}">Musterkoch</td>
|
||||
<tr th:each="staff : ${staff}">
|
||||
<td th:text="${staff.name}">Max</td>
|
||||
<td th:text="${staff.surname}">Musterkoch</td>
|
||||
<td th:text="${staff.job}">Koch</td>
|
||||
<td>
|
||||
<a th:href="@{'/staff/edit/' + ${staff.id}}"><button class="btn btn-warning">Bearbeiten</button></a>
|
||||
<a th:href="@{'/staff/edit/' + ${staff.id}}"
|
||||
><button class="btn btn-warning">Bearbeiten</button></a
|
||||
>
|
||||
</td>
|
||||
<td>
|
||||
<form th:action="@{/staff/remove}" method="post">
|
||||
|
|
Loading…
Reference in a new issue