Skip to content

Commit

Permalink
optimize codebase
Browse files Browse the repository at this point in the history
  • Loading branch information
hemantDwivedi committed Jul 31, 2024
1 parent b9571a9 commit abec83d
Show file tree
Hide file tree
Showing 62 changed files with 353 additions and 1,444 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@

@FeignClient("EMPLOYEE-SERVICE")
public interface ApiClient {
@GetMapping("/api/v1/employees/exists/{id}")
@GetMapping("/v1/employees/exists/{id}")
Boolean existById(@PathVariable Long id);
}
Original file line number Diff line number Diff line change
@@ -1,42 +1,45 @@
package com.hrm.attendancetracking.controller;

import com.hrm.attendancetracking.dto.AttendanceResponse;
import com.hrm.attendancetracking.dto.request.AttendanceRequest;
import com.hrm.attendancetracking.dto.response.AttendanceResponse;
import com.hrm.attendancetracking.dto.response.ListResponse;
import com.hrm.attendancetracking.service.ATService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/v1/employees")
@RequestMapping("/v1/attendances")
@RequiredArgsConstructor
@Slf4j
public class AttendanceController {
private final ATService atService;

@PostMapping("/{employeeId}/attendances")
public ResponseEntity<String> attendanceEntry(@PathVariable Long employeeId){
return new ResponseEntity<>(atService.attendanceEntry(employeeId), HttpStatus.CREATED);
@PostMapping
public ResponseEntity<String> attendanceEntry(@RequestBody AttendanceRequest attendanceRequest){
log.info("Attendance Entry");
return new ResponseEntity<>(atService.attendanceEntry(attendanceRequest.getEmployeeId()), HttpStatus.CREATED);
}

@GetMapping("/{employeeId}/attendances")
public ResponseEntity<List<AttendanceResponse>> getAllAttendance(@PathVariable Long employeeId){
return ResponseEntity.ok(atService.getAllAttendance(employeeId));
@GetMapping
public ResponseEntity<ListResponse> getAllAttendance(@RequestBody AttendanceRequest attendanceRequest){
return ResponseEntity.ok(atService.getAllAttendance(attendanceRequest.getEmployeeId()));
}

@GetMapping("/{employeeId}/attendances/{attendanceId}")
public ResponseEntity<AttendanceResponse> getAttendanceById(@PathVariable Long employeeId, @PathVariable Integer attendanceId){
return ResponseEntity.ok(atService.getAttendanceById(employeeId, attendanceId));
@GetMapping("/{id}")
public ResponseEntity<AttendanceResponse> getAttendanceById(@PathVariable Integer id){
return ResponseEntity.ok(atService.getAttendanceById(id));
}

@PatchMapping("/{employeeId}/attendances/{id}")
public void clockOutTime(@PathVariable Long employeeId, @PathVariable Integer id) {
atService.clockOut(employeeId, id);
@PatchMapping("/{id}")
public void clockOutTime(@PathVariable Integer id) {
atService.clockOut(id);
}

@DeleteMapping("/{employeeId}/attendances/{attendanceId}")
public void deleteAttendance(@PathVariable Long employeeId, @PathVariable Integer attendanceId){
atService.deleteAttendanceRecord(employeeId, attendanceId);
@DeleteMapping("/{id}")
public void deleteAttendance(@PathVariable Integer id){
atService.deleteAttendanceRecord(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,63 +1,62 @@
package com.hrm.attendancetracking.controller;

import com.hrm.attendancetracking.dto.LeaveRequest;
import com.hrm.attendancetracking.dto.LeaveResponse;
import com.hrm.attendancetracking.dto.request.LeaveRequest;
import com.hrm.attendancetracking.dto.response.LeaveResponse;
import com.hrm.attendancetracking.dto.response.ListResponse;
import com.hrm.attendancetracking.service.LeaveRequestService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/v1/employees")
@RequestMapping("/v1/leaves")
@RequiredArgsConstructor
public class LeaveRequestController {
private final LeaveRequestService leaveRequestService;

@PostMapping("/{employeeId}/leaves")
public ResponseEntity<String> leaveRequest(@RequestBody LeaveRequest leaveRequest, @PathVariable Long employeeId){
return new ResponseEntity<>(leaveRequestService.createLeaveRequest(leaveRequest, employeeId), HttpStatus.CREATED);
@PostMapping
public ResponseEntity<String> leaveRequest(@RequestBody LeaveRequest leaveRequest){
return new ResponseEntity<>(leaveRequestService.createLeaveRequest(leaveRequest), HttpStatus.CREATED);
}

@GetMapping("/{employeeId}/leaves")
public ResponseEntity<List<LeaveResponse>> getLeaveRequests(@PathVariable Long employeeId){
return ResponseEntity.ok(leaveRequestService.getLeaveRequests(employeeId));
@GetMapping("/eId/{id}")
public ResponseEntity<ListResponse> getLeaveRequests(@PathVariable Long id){
return ResponseEntity.ok(leaveRequestService.getLeaveRequests(id));
}

@GetMapping("/{employeeId}/leaves/{leaveId}")
public ResponseEntity<LeaveResponse> getLeaveById(@PathVariable Long employeeId, @PathVariable Integer leaveId){
return ResponseEntity.ok(leaveRequestService.getLeaveById(employeeId, leaveId));
@GetMapping("/{leaveId}")
public ResponseEntity<LeaveResponse> getLeaveById(@PathVariable Integer leaveId){
return ResponseEntity.ok(leaveRequestService.getLeaveById(leaveId));
}

@PatchMapping("/{employeeId}/leaves/{leaveId}/accept")
public void acceptLeave(@PathVariable Long employeeId, @PathVariable Integer leaveId){
leaveRequestService.acceptLeave(employeeId, leaveId);
@PatchMapping("/{leaveId}/accept")
public void acceptLeave(@PathVariable Integer leaveId){
leaveRequestService.acceptLeave(leaveId);
}

@PatchMapping("/{employeeId}/leaves/{leaveId}/refuse")
public void refuseLeave(@PathVariable Long employeeId, @PathVariable Integer leaveId){
leaveRequestService.refuseLeave(employeeId, leaveId);
@PatchMapping("/{leaveId}/refuse")
public void refuseLeave(@PathVariable Integer leaveId){
leaveRequestService.refuseLeave(leaveId);
}

@PatchMapping("/{employeeId}/leaves/{leaveId}/active")
public void activeLeave(@PathVariable Long employeeId, @PathVariable Integer leaveId){
leaveRequestService.activeLeave(employeeId, leaveId);
@PatchMapping("/{leaveId}/active")
public void activeLeave(@PathVariable Integer leaveId){
leaveRequestService.activeLeave(leaveId);
}

@PatchMapping("/{employeeId}/leaves/{leaveId}/inactive")
public void inactiveLeave(@PathVariable Long employeeId, @PathVariable Integer leaveId){
leaveRequestService.inactiveLeave(employeeId, leaveId);
@PatchMapping("/{leaveId}/inactive")
public void inactiveLeave(@PathVariable Integer leaveId){
leaveRequestService.inactiveLeave(leaveId);
}

@PutMapping("/{employeeId}/leaves/{leaveId}")
public void update(@PathVariable Long employeeId, @PathVariable Integer leaveId, @RequestBody LeaveRequest leaveRequest){
leaveRequestService.update(employeeId, leaveId, leaveRequest);
@PutMapping("/{leaveId}")
public void update(@PathVariable Integer leaveId, @RequestBody LeaveRequest leaveRequest){
leaveRequestService.update(leaveId, leaveRequest);
}

@DeleteMapping("/{employeeId}/leaves/{leaveId}")
public void delete(@PathVariable Long employeeId, @PathVariable Integer leaveId){
leaveRequestService.delete(employeeId, leaveId);
@DeleteMapping("/{leaveId}")
public void delete(@PathVariable Integer leaveId){
leaveRequestService.delete(leaveId);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.hrm.attendancetracking.dto;
package com.hrm.attendancetracking.dto.request;

import lombok.*;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Setter
public class AttendanceRequest {
private Long employeeId;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hrm.attendancetracking.dto;
package com.hrm.attendancetracking.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hrm.attendancetracking.dto;
package com.hrm.attendancetracking.dto.response;

import lombok.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hrm.attendancetracking.dto;
package com.hrm.attendancetracking.dto.response;

import lombok.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.hrm.attendancetracking.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ListResponse {
private List<Object> data;
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,31 @@
package com.hrm.attendancetracking.service;

import com.hrm.attendancetracking.client.ApiClient;
import com.hrm.attendancetracking.dto.AttendanceResponse;
import com.hrm.attendancetracking.dto.response.AttendanceResponse;
import com.hrm.attendancetracking.dto.response.ListResponse;
import com.hrm.attendancetracking.exception.ResourceNotFoundException;
import com.hrm.attendancetracking.helper.DateAndTimeHelper;
import com.hrm.attendancetracking.model.AttendanceRecord;
import com.hrm.attendancetracking.repository.AttendanceRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalTime;
import java.util.List;
import java.util.stream.Collectors;

import static java.lang.String.*;

@Service
@RequiredArgsConstructor
@Slf4j
public class ATService {
private final AttendanceRepository attendanceRepository;
private final DateAndTimeHelper dateAndTimeHelper;
private final ApiClient apiClient;

public String attendanceEntry(Long employeeId) {
log.info("Attendance Entry Service");
Boolean employee = apiClient.existById(employeeId);
if (!employee) throw new ResourceNotFoundException("Employee not found");
AttendanceRecord attendanceRecord = AttendanceRecord
Expand All @@ -31,49 +36,41 @@ public String attendanceEntry(Long employeeId) {
.build();

AttendanceRecord attendance = attendanceRepository.save(attendanceRecord);
return "Attendance recorded ID: " + attendance.getAttendanceId();
log.info("Attendance ID: {}", attendance.getAttendanceId());
return format("Entry saved ID: %s", attendance.getAttendanceId());
}

public List<AttendanceResponse> getAllAttendance(Long empId) {
return attendanceRepository
public ListResponse getAllAttendance(Long empId) {
return new ListResponse(attendanceRepository
.findByEmployeeId(empId)
.stream()
.map(this::mapToAttendanceResponse)
.collect(Collectors.toList());
.collect(Collectors.toList()));
}

public AttendanceResponse getAttendanceById(Long eId, Integer attendanceId) {
public AttendanceResponse getAttendanceById(Integer attendanceId) {
AttendanceRecord attendanceRecord = attendanceRepository.findById(attendanceId)
.orElseThrow(
() -> new ResourceNotFoundException("Record not found")
() -> new ResourceNotFoundException(format("Attendance Record ID: %s not found", attendanceId))
);
if (!attendanceRecord.getEmployeeId().equals(eId))
throw new ResourceNotFoundException("Employee ID did not match!");
return mapToAttendanceResponse(attendanceRecord);
}

public void clockOut(Long eId, Integer id) {
public void clockOut(Integer id) {
AttendanceRecord attendanceRecord = attendanceRepository.findById(id)
.orElseThrow(
() -> new ResourceNotFoundException("Record not found")
() -> new ResourceNotFoundException(format("Attendance Record ID: %s not found", id))
);
if (!attendanceRecord.getEmployeeId().equals(eId))
throw new ResourceNotFoundException("Employee ID did not match!");
attendanceRecord.setClockOut(dateAndTimeHelper.getLocalTime());
LocalTime productiveTime = dateAndTimeHelper.productiveTime(attendanceRecord.getClockIn(),
attendanceRecord.getClockOut());
attendanceRecord.setProductive(productiveTime);
attendanceRepository.save(attendanceRecord);
}

public void deleteAttendanceRecord(Long eId, Integer attendanceId) {
AttendanceRecord attendanceRecord = attendanceRepository.findById(attendanceId)
.orElseThrow(
() -> new ResourceNotFoundException("Record not found")
);
if (!attendanceRecord.getEmployeeId().equals(eId))
throw new ResourceNotFoundException("Employee ID did not match!");
attendanceRepository.delete(attendanceRecord);
public void deleteAttendanceRecord(Integer attendanceId) {
if (attendanceRepository.existsById(attendanceId)) attendanceRepository.deleteById(attendanceId);
else throw new ResourceNotFoundException(format("Attendance Record ID: %s not found", attendanceId));
}

private AttendanceResponse mapToAttendanceResponse(AttendanceRecord attendanceRecord) {
Expand Down
Loading

0 comments on commit abec83d

Please sign in to comment.