Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RI-37: [job-boad] permet la création de job applies #192

Merged
merged 1 commit into from
Nov 22, 2021
Merged
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

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.dynonuggets.refonteimplicaction.adapter;

import com.dynonuggets.refonteimplicaction.dto.JobApplicationDto;
import com.dynonuggets.refonteimplicaction.model.JobApplication;
import com.dynonuggets.refonteimplicaction.model.JobPosting;
import org.springframework.stereotype.Component;

@Component
public class JobApplicationAdapter {

public JobApplicationDto toDto(JobApplication model) {
final JobPosting job = model.getJob();
final boolean hasCompany = job.getCompany() != null;
final String companyName = hasCompany ? job.getCompany().getName() : null;
final String companyImageUrl = hasCompany ? job.getCompany().getLogo() : null;

return JobApplicationDto.builder()
.id(model.getId())
.jobId(job.getId())
.jobTitle(job.getTitle())
.companyName(companyName)
.companyImageUri(companyImageUrl)
.status(model.getStatus())
.contractType(job.getContractType().getCode())
.build();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.dynonuggets.refonteimplicaction.controller;

import com.dynonuggets.refonteimplicaction.dto.ApplicationRequest;
import com.dynonuggets.refonteimplicaction.dto.JobApplicationDto;
import com.dynonuggets.refonteimplicaction.exception.ImplicactionException;
import com.dynonuggets.refonteimplicaction.service.JobApplicationService;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URI;

import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.APPLY_BASE_URI;
import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.GET_APPLY_URI;

@RestController
@RequestMapping(APPLY_BASE_URI)
@AllArgsConstructor
public class JobApplicationController {

private final JobApplicationService applyService;

@PostMapping
public ResponseEntity<JobApplicationDto> createApply(@RequestBody ApplicationRequest requestDto) throws ImplicactionException {
final JobApplicationDto saveDto = applyService.createApplyIfNotExists(requestDto);
URI location = UriComponentsBuilder.fromPath(APPLY_BASE_URI + GET_APPLY_URI)
.buildAndExpand(saveDto.getId())
.toUri();

return ResponseEntity.created(location).body(saveDto);
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package com.dynonuggets.refonteimplicaction.dto;

import com.dynonuggets.refonteimplicaction.model.ApplyStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;

@Data
@Builder
@Getter
@AllArgsConstructor
public class StatusDto {
private Long id;
private String label;
private String type;
public class ApplicationRequest {
private Long jobId;
private ApplyStatusEnum status;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dynonuggets.refonteimplicaction.dto;

import com.dynonuggets.refonteimplicaction.model.ApplyStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -8,13 +9,19 @@
@Builder
@AllArgsConstructor
public class JobApplicationDto {

private Long id;

private JobPostingDto jobPosting;
private Long jobId;

private String jobTitle;

private String companyName;

private String companyImageUri;

private UserDto user;
private ApplyStatusEnum status;

private ApplicationStatusDto status;
private String contractType;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.dynonuggets.refonteimplicaction.model;

public enum ApplyStatusEnum {
PENDING, SENT, CHASED, INTERVIEW, REFUSED, HIRED
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.dynonuggets.refonteimplicaction.model;

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

import javax.persistence.*;
import java.time.Instant;
Expand All @@ -15,6 +12,7 @@
@NoArgsConstructor
@Getter
@Setter
@Builder
@Table(name = "job_application")
public class JobApplication {

Expand All @@ -25,16 +23,18 @@ public class JobApplication {

@ManyToOne
@JoinColumn(name = "job_id", nullable = false)
private JobPosting jobPosting;
private JobPosting job;

@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;

@ManyToOne
@JoinColumn(name = "status_id", nullable = false)
private Status status;
@Enumerated(EnumType.STRING)
private ApplyStatusEnum status;

@Column(name = "last_update")
private Instant lastUpdate;

@Column(name = "submitted_at")
private Instant submitedAt;
@Column(columnDefinition = "boolean default false")
private boolean archive;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.dynonuggets.refonteimplicaction.repository;

import com.dynonuggets.refonteimplicaction.model.JobApplication;
import com.dynonuggets.refonteimplicaction.model.JobPosting;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface JobApplicationRepository extends JpaRepository<JobApplication, Long> {
Optional<JobApplication> findByJob(JobPosting job);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.dynonuggets.refonteimplicaction.service;

import com.dynonuggets.refonteimplicaction.adapter.JobApplicationAdapter;
import com.dynonuggets.refonteimplicaction.dto.ApplicationRequest;
import com.dynonuggets.refonteimplicaction.dto.JobApplicationDto;
import com.dynonuggets.refonteimplicaction.exception.NotFoundException;
import com.dynonuggets.refonteimplicaction.model.JobApplication;
import com.dynonuggets.refonteimplicaction.model.JobPosting;
import com.dynonuggets.refonteimplicaction.repository.JobApplicationRepository;
import com.dynonuggets.refonteimplicaction.repository.JobPostingRepository;
import com.dynonuggets.refonteimplicaction.utils.Message;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.Instant;

import static com.dynonuggets.refonteimplicaction.utils.Message.JOB_NOT_FOUND_MESSAGE;

@Service
@AllArgsConstructor
public class JobApplicationService {

private final JobApplicationRepository applyRepository;
private final JobPostingRepository jobRepository;
private final JobApplicationAdapter applyAdapter;
private final AuthService authService;

public JobApplicationDto createApplyIfNotExists(ApplicationRequest applyRequest) {
final JobPosting job = jobRepository.findById(applyRequest.getJobId())
.orElseThrow(() -> new NotFoundException(String.format(JOB_NOT_FOUND_MESSAGE, applyRequest.getJobId())));

if (applyRepository.findByJob(job).isPresent()) {
throw new IllegalArgumentException(String.format(Message.APPLY_ALREADY_EXISTS_FOR_JOB, job.getId()));
}

final JobApplication apply = JobApplication.builder()
.job(job)
.archive(false)
.user(authService.getCurrentUser())
.status(applyRequest.getStatus())
.lastUpdate(Instant.now())
.build();

final JobApplication applySave = applyRepository.save(apply);

return applyAdapter.toDto(applySave);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ public class ApiUrls {
public static final String FILE_BASE_URI = "/api/files";
public static final String GET_FILE_BY_KEY = "/{objectKey}";

// APPLICATION
public static final String APPLY_BASE_URI = "/api/applies";
public static final String GET_APPLY_URI = "/{applyId}";

private ApiUrls() {
// empêche la construction d'un objet ApiUrls
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ public class Message {
public static final String UNAUTHORIZED_CONTENT_TYPE_MESSAGE = "Exception occured while uploading the file [%s] : unauthorized content type";
public static final String FILE_NOT_FOUND_MESSAGE = "No file found with id [%s]";

// JobApplication messages
public static final String APPLY_NOT_FOUND_MESSAGE = "No apply found with id [%d]";
public static final String APPLY_ALREADY_EXISTS_FOR_JOB = "Unable to apply, apply already exists with jobId [%d]";

public static final String BAD_CREDENTIAL_MESSAGE = "Nom d'utilisateur ou mot de passe incorrect.";
public static final String USER_DISABLED_MESSAGE = "Votre compte n'a pas encore été activé.";

Expand Down
Loading