Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
.requestMatchers("/api/password/forgot", "/api/password/verify-otp", "/api/password/reset").permitAll()
.requestMatchers("/api/password/change").authenticated()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.requestMatchers("/api/health/**").permitAll()
.requestMatchers("/api/employee/**").permitAll()
// .requestMatchers("/api/employee/**").hasAnyRole("EMPLOYEE", "ADMIN")
// .requestMatchers("/api/customer/**").hasAnyRole("CUSTOMER", "EMPLOYEE", "ADMIN")
.anyRequest().authenticated())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,62 @@
package com.example.ead_backend.controller;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.ead_backend.dto.EmployeeCreateDTO;
import com.example.ead_backend.exceptions.EmployeeNotFoundException;
import com.example.ead_backend.service.EmployeeService;

import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/api/employee")
@RequiredArgsConstructor
public class EmployeeController {

private final EmployeeService employeeService;

@GetMapping("/{id}")
public ResponseEntity<EmployeeCreateDTO> getEmployeeById(@PathVariable Long id) {
if(id == null){
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try{
EmployeeCreateDTO employeeDTO = employeeService.getEmployeeById(id);
return new ResponseEntity<>(employeeDTO, HttpStatus.OK);
}catch (EmployeeNotFoundException e){
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}catch (Exception e){
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}

@PutMapping("/{id}")
public ResponseEntity<EmployeeCreateDTO> updateEmployee(
@PathVariable Long id,
@RequestBody EmployeeCreateDTO dto) {

if (id == null || dto == null) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try{
EmployeeCreateDTO updated = employeeService.updateEmployee(id, dto);
return new ResponseEntity<>(updated,HttpStatus.OK);
}catch (EmployeeNotFoundException e){
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}catch (Exception e){
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/example/ead_backend/controller/HealthTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.ead_backend.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/health")
public class HealthTest {
@GetMapping
public String healthTest(){
return "App is running...";
}
}
35 changes: 18 additions & 17 deletions src/main/java/com/example/ead_backend/dto/EmployeeDTO.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
package com.example.ead_backend.dto;
// package com.example.ead_backend.dto;

import java.io.Serializable;
import java.time.LocalDate;
// import java.io.Serializable;
// import java.time.LocalDate;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
// import lombok.AllArgsConstructor;
// import lombok.Data;
// import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class EmployeeDTO implements Serializable {
private String employeeId;
private String name;
private String email;
private String password;
private String specialization;
private LocalDate joinedDate;
}
// @AllArgsConstructor
// @NoArgsConstructor
// @Data
// public class EmployeeDTO implements Serializable {
// private Long employeeId;
// private String firstName;
// private String lastName;
// private String email;
// private String password;
// private String specialization;
// private LocalDate joinedDate;
// }
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.ead_backend.exceptions;

public class EmployeeNotFoundException extends RuntimeException {
public EmployeeNotFoundException() {
}

public EmployeeNotFoundException(String message) {
}

public EmployeeNotFoundException(String message, Throwable cause) {
}
}
28 changes: 28 additions & 0 deletions src/main/java/com/example/ead_backend/mapper/EmployeeMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.ead_backend.mapper;

import org.mapstruct.*;

import com.example.ead_backend.dto.EmployeeCreateDTO;
import com.example.ead_backend.model.entity.Employee;

@Mapper(componentModel = "spring", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface EmployeeMapper {

// Map Employee Entity to DTO
@Mapping(source = "user.firstName", target = "firstName")
@Mapping(source = "user.lastName", target = "lastName")
@Mapping(source = "user.email", target = "email")
@Mapping(source = "joinedDate", target = "joinedDate")
EmployeeCreateDTO toDTO(Employee employee);

// Update existing Employee from DTO
@Mapping(source = "firstName", target = "user.firstName")
@Mapping(source = "lastName", target = "user.lastName")
@Mapping(source = "email", target = "user.email")
@Mapping(target = "joinedDate", ignore = true)
@Mapping(target = "id", ignore = true)
@Mapping(target = "role", ignore = true)
@Mapping(target = "appointments", ignore = true)
@Mapping(target = "projects", ignore = true)
void updateEntityFromDTO(EmployeeCreateDTO dto, @MappingTarget Employee employee);
}
16 changes: 6 additions & 10 deletions src/main/java/com/example/ead_backend/model/entity/Employee.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,16 @@ public class Employee {
@Column(nullable = false)
private LocalDate joinedDate;

// @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
// private List<Appointment> appointments;
//
// @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
// private List<Project> projects;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Appointment> appointments;

@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Project> projects;

public Employee(User user, Role role, LocalDate joinedDate) {
this.user = user;
this.role = role;
this.joinedDate = joinedDate;
}
}
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Appointment> appointments;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Project> projects;
}

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ead_backend.service;

import com.example.ead_backend.dto.EmployeeCreateDTO;
import com.example.ead_backend.model.entity.Employee;
import com.example.ead_backend.model.entity.User;
import com.example.ead_backend.model.enums.Role;
Expand All @@ -9,4 +10,7 @@
public interface EmployeeService {
Employee createEmployee(User user, Role role, LocalDate joinedDate);
Employee findByUserId(Long userId);

EmployeeCreateDTO getEmployeeById(Long id);
EmployeeCreateDTO updateEmployee(Long id, EmployeeCreateDTO dto);
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
package com.example.ead_backend.service.impl;

import com.example.ead_backend.dto.EmployeeCreateDTO;
import com.example.ead_backend.mapper.EmployeeMapper;
import com.example.ead_backend.model.entity.Employee;
import com.example.ead_backend.model.entity.User;
import com.example.ead_backend.model.enums.Role;
import com.example.ead_backend.repository.EmployeeRepository;
import com.example.ead_backend.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;

import lombok.RequiredArgsConstructor;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;

@Service
@Transactional
@RequiredArgsConstructor
public class EmployeeServiceImpl implements EmployeeService {

@Autowired
private EmployeeRepository employeeRepository;
private final EmployeeRepository employeeRepository;
private final EmployeeMapper employeeMapper;

@Override
@Transactional
Expand All @@ -31,4 +37,21 @@ public Employee createEmployee(User user, Role role, LocalDate joinedDate) {
public Employee findByUserId(Long userId) {
return employeeRepository.findByUserId(userId).orElse(null);
}

@Override
public EmployeeCreateDTO getEmployeeById(Long id) {
Employee employee = employeeRepository.findById(id)
.orElseThrow(() -> new RuntimeException("Employee not found with id: " + id));
return employeeMapper.toDTO(employee);
}

@Override
public EmployeeCreateDTO updateEmployee(Long id, EmployeeCreateDTO dto) {
Employee employee = employeeRepository.findById(id)
.orElseThrow(() -> new RuntimeException("Employee not found with id: " + id));

employeeMapper.updateEntityFromDTO(dto, employee);

return employeeMapper.toDTO(employee);
}
}