Skip to content

Commit

Permalink
Refactored code structure
Browse files Browse the repository at this point in the history
  • Loading branch information
masoudarvishian committed May 10, 2024
1 parent 9935e86 commit b47654a
Show file tree
Hide file tree
Showing 27 changed files with 247 additions and 202 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.zenjob.challenge.service;
package com.zenjob.challenge.application.interfaces;

import com.zenjob.challenge.entity.Job;
import com.zenjob.challenge.entity.Shift;
import com.zenjob.challenge.domain.entity.Job;
import com.zenjob.challenge.domain.entity.Shift;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

public interface IJobService {
public interface JobService {
Job createJob(UUID companyId, LocalDate startDate, LocalDate endDate);
List<Shift> getShifts(UUID id);
void bookTalent(UUID talent, UUID shiftId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.zenjob.challenge.service;

import com.zenjob.challenge.customexception.InvalidActionException;
import com.zenjob.challenge.customexception.InvalidEndDateException;
import com.zenjob.challenge.customexception.InvalidStartDateException;
import com.zenjob.challenge.entity.Job;
import com.zenjob.challenge.entity.Shift;
package com.zenjob.challenge.application.services;

import com.zenjob.challenge.application.interfaces.JobService;
import com.zenjob.challenge.domain.exceptions.InvalidActionException;
import com.zenjob.challenge.domain.exceptions.InvalidEndDateException;
import com.zenjob.challenge.domain.exceptions.InvalidStartDateException;
import com.zenjob.challenge.domain.entity.Job;
import com.zenjob.challenge.domain.entity.Shift;
import com.zenjob.challenge.repository.JobRepository;
import com.zenjob.challenge.repository.ShiftRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -23,8 +24,8 @@
@RequiredArgsConstructor
@Service
@Transactional
public class JobService implements IJobService {
private final JobRepository jobRepository;
public class JobServiceImpl implements JobService {
private final JobRepository jobRepository;
private final ShiftRepository shiftRepository;

public Job createJob(UUID companyId, LocalDate startDate, LocalDate endDate) {
Expand Down
69 changes: 0 additions & 69 deletions src/main/java/com/zenjob/challenge/controller/JobController.java

This file was deleted.

96 changes: 0 additions & 96 deletions src/main/java/com/zenjob/challenge/controller/ShiftController.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.entity;
package com.zenjob.challenge.domain.entity;

import lombok.*;
import org.springframework.data.annotation.CreatedDate;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.entity;
package com.zenjob.challenge.domain.entity;

import lombok.*;
import lombok.experimental.Accessors;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.customexception;
package com.zenjob.challenge.domain.exceptions;

public class InvalidActionException extends RuntimeException {
public InvalidActionException() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.customexception;
package com.zenjob.challenge.domain.exceptions;

public class InvalidEndDateException extends RuntimeException {
public InvalidEndDateException(String message) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.customexception;
package com.zenjob.challenge.domain.exceptions;

public class InvalidStartDateException extends RuntimeException {
public InvalidStartDateException() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.zenjob.challenge.repository;

import com.zenjob.challenge.entity.Job;
import com.zenjob.challenge.domain.entity.Job;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.zenjob.challenge.repository;

import com.zenjob.challenge.entity.Shift;
import com.zenjob.challenge.domain.entity.Shift;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.config;
package com.zenjob.challenge.rest.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.config;
package com.zenjob.challenge.rest.config;

import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.zenjob.challenge.rest.controller;

import com.zenjob.challenge.rest.dto.job.CancelJobRequestDto;
import com.zenjob.challenge.rest.dto.job.RequestJobRequestDto;
import com.zenjob.challenge.rest.dto.job.RequestJobResponseDto;
import com.zenjob.challenge.rest.dto.ResponseDto;
import com.zenjob.challenge.domain.entity.Job;
import com.zenjob.challenge.application.interfaces.JobService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.UUID;

@RestController
@RequestMapping(path = "/job")
@RequiredArgsConstructor
public class JobController {
private final JobService jobService;

@PostMapping
@ResponseBody
public ResponseDto<RequestJobResponseDto> requestJob(@RequestBody @Valid RequestJobRequestDto dto) {
Job job = jobService.createJob(dto.getCompanyId(), dto.getStart(), dto.getEnd());
return ResponseDto.<RequestJobResponseDto>builder()
.data(RequestJobResponseDto.builder()
.jobId(job.getId())
.build())
.build();
}

@DeleteMapping(path = "/{id}/cancel")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void cancelJob(@PathVariable("id") UUID jobId, @RequestBody @Valid CancelJobRequestDto dto) {
jobService.cancelJob(dto.getCompanyId(), jobId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.zenjob.challenge.rest.controller;

import com.zenjob.challenge.rest.dto.ResponseDto;
import com.zenjob.challenge.application.interfaces.JobService;
import com.zenjob.challenge.rest.dto.shift.*;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

@RestController
@RequestMapping(path = "/shift")
@RequiredArgsConstructor
public class ShiftController {
private final JobService jobService;

@GetMapping(path = "/{jobId}")
@ResponseBody
public ResponseDto<GetShiftsResponseDto> getShifts(@PathVariable("jobId") UUID uuid) {
List<ShiftResponseDto> shiftResponses = jobService.getShifts(uuid).stream()
.map(shift -> ShiftResponseDto.builder()
.id(shift.getId())
.talentId(shift.getTalentId())
.jobId(shift.getJob().getId())
.start(shift.getCreatedAt())
.end(shift.getEndTime())
.build())
.collect(Collectors.toList());
return ResponseDto.<GetShiftsResponseDto>builder()
.data(GetShiftsResponseDto.builder()
.shifts(shiftResponses)
.build())
.build();
}

@PatchMapping(path = "/{id}/book")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void bookTalent(@PathVariable("id") UUID shiftId, @RequestBody @Valid BookTalentRequestDto dto) {
jobService.bookTalent(dto.getTalentId(), shiftId);
}

@PatchMapping(path = "/cancel-talent")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void cancelShiftForTalent(@RequestBody @Valid CancelShiftForTalentRequestDto dto) {
jobService.cancelShiftForTalent(dto.getCompanyId(), dto.getTalentId());
}

@DeleteMapping(path = "/{id}/cancel")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void cancelShift(@PathVariable("id") UUID shiftId, @RequestBody @Valid CancelShiftRequestDto dto) {
jobService.cancelShift(dto.getCompanyId(), shiftId);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zenjob.challenge.dto;
package com.zenjob.challenge.rest.dto;

import lombok.Builder;
import lombok.Data;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.zenjob.challenge.rest.dto.job;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.UUID;

@NoArgsConstructor
@Data
public class CancelJobRequestDto {
private UUID companyId;
}
Loading

0 comments on commit b47654a

Please sign in to comment.