diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapter.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapter.java index 96dd51e9..9493f41d 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapter.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapter.java @@ -4,6 +4,7 @@ import com.dynonuggets.refonteimplicaction.dto.JobPostingDto; import com.dynonuggets.refonteimplicaction.model.Company; import com.dynonuggets.refonteimplicaction.model.JobPosting; +import com.dynonuggets.refonteimplicaction.model.User; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; @@ -15,6 +16,8 @@ public class JobPostingAdapter { public JobPostingDto toDto(JobPosting model) { + final String username = model.getPoster() != null ? model.getPoster().getUsername() : ""; + final Long userId = model.getPoster() != null ? model.getPoster().getId() : null; CompanyDto companyDto = companyAdapter.toDto(model.getCompany()); return JobPostingDto.builder() @@ -31,10 +34,12 @@ public JobPostingDto toDto(JobPosting model) { .archive(model.isArchive()) .businessSector(model.getBusinessSector()) .valid(model.isValid()) + .posterName(username) + .posterId(userId) .build(); } - public JobPosting toModel(JobPostingDto dto) { + public JobPosting toModel(JobPostingDto dto, User user) { Company company = companyAdapter.toModel(dto.getCompany()); @@ -52,6 +57,7 @@ public JobPosting toModel(JobPostingDto dto) { .createdAt(dto.getCreatedAt()) .archive(dto.isArchive()) .valid(dto.isValid()) + .poster(user) .build(); } } diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/dto/JobPostingDto.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/dto/JobPostingDto.java index c0fa0bb3..ef56bf85 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/dto/JobPostingDto.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/dto/JobPostingDto.java @@ -29,5 +29,6 @@ public class JobPostingDto { private boolean archive; private boolean apply; private boolean valid; - + private Long posterId; + private String posterName; } diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/model/JobPosting.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/model/JobPosting.java index 982d526e..7d7fa9a0 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/model/JobPosting.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/model/JobPosting.java @@ -57,4 +57,9 @@ public class JobPosting { @Column(name = "valid") private boolean valid; + + @ManyToOne + @JoinColumn(name = "posted_by") + private User poster; + } diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java index feaada3f..255d4a6b 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java @@ -31,7 +31,7 @@ public class JobPostingService { public JobPostingDto createJob(JobPostingDto jobPostingDto) { - JobPosting jobPosting = jobPostingAdapter.toModel(jobPostingDto); + JobPosting jobPosting = jobPostingAdapter.toModel(jobPostingDto, authService.getCurrentUser()); jobPosting.setCreatedAt(Instant.now()); JobPosting jobSaved = jobPostingRepository.save(jobPosting); return jobPostingAdapter.toDto(jobSaved); @@ -73,7 +73,7 @@ private List getAllAppliesWithJobIdsIn(List jobIds, Long userId) { @Transactional public JobPostingDto saveOrUpdateJobPosting(final JobPostingDto jobPostingDto) { - JobPosting jobPosting = jobPostingAdapter.toModel(jobPostingDto); + JobPosting jobPosting = jobPostingAdapter.toModel(jobPostingDto, authService.getCurrentUser()); final JobPosting save = jobPostingRepository.save(jobPosting); return jobPostingAdapter.toDto(save); } diff --git a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobApplicationAdapterTest.java b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobApplicationAdapterTest.java index 87e2c8db..0a60073d 100644 --- a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobApplicationAdapterTest.java +++ b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobApplicationAdapterTest.java @@ -18,9 +18,9 @@ class JobApplicationAdapterTest extends ControllerIntegrationTestBase { @Test void given_company_should_return_dto() { // given - Company company = new Company(1234L, "World Company", "http://logo.com", "La World Company est une multinationale imaginaire basée aux États-Unis", "http://word-company.com"); - JobPosting job = new JobPosting(34L, company, "Job de folie", "blablabla", "blablabla", "Paris", "240k", null, CDD, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true); User user = User.builder().id(87L).build(); + Company company = new Company(1234L, "World Company", "http://logo.com", "La World Company est une multinationale imaginaire basée aux États-Unis", "http://word-company.com"); + JobPosting job = new JobPosting(34L, company, "Job de folie", "blablabla", "blablabla", "Paris", "240k", null, CDD, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true, user); JobApplication model = new JobApplication(123L, job, user, PENDING, Instant.now(), false); // when @@ -40,8 +40,8 @@ void given_company_should_return_dto() { void given_no_company_should_return_dto() { // given Company company = null; - JobPosting job = new JobPosting(34L, company, "Job de folie", "blablabla", "blablabla", "Paris", "240k", null, CDD, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true); User user = User.builder().id(87L).build(); + JobPosting job = new JobPosting(34L, company, "Job de folie", "blablabla", "blablabla", "Paris", "240k", null, CDD, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true, user); JobApplication model = new JobApplication(123L, job, user, PENDING, Instant.now(), false); // when diff --git a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapterTest.java b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapterTest.java index c8664012..a772baf4 100644 --- a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapterTest.java +++ b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/adapter/JobPostingAdapterTest.java @@ -2,8 +2,10 @@ import com.dynonuggets.refonteimplicaction.dto.CompanyDto; import com.dynonuggets.refonteimplicaction.dto.JobPostingDto; +import com.dynonuggets.refonteimplicaction.model.BusinessSectorEnum; import com.dynonuggets.refonteimplicaction.model.Company; import com.dynonuggets.refonteimplicaction.model.JobPosting; +import com.dynonuggets.refonteimplicaction.model.User; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -16,8 +18,11 @@ class JobPostingAdapterTest { CompanyDto companyDto; Company company; JobPosting jobPosting; + JobPostingDto expectedJobPostingDto; JobPostingAdapter jobPostingAdapter; CompanyAdapter companyAdapter; + User user; + Instant createdAt; @BeforeEach public void setUp() { @@ -25,6 +30,8 @@ public void setUp() { jobPostingAdapter = new JobPostingAdapter(companyAdapter); company = new Company(1L, "urlModel", "logo", "name", "description"); companyDto = new CompanyDto(1L, "urlModel", "logo", "name", "description"); + user = User.builder().id(2L).username("user").build(); + createdAt = Instant.now(); jobPosting = JobPosting.builder() .id(7L) @@ -36,31 +43,45 @@ public void setUp() { .salary("salary") .keywords("keywords") .contractType(CDD) - .createdAt(Instant.now()) + .businessSector(BusinessSectorEnum.ASSURANCE) + .createdAt(createdAt) + .archive(false) + .valid(true) + .poster(user) + .build(); + + expectedJobPostingDto = JobPostingDto.builder() + .id(7L) + .company(companyDto) + .title("title") + .shortDescription("short_description") + .description("description") + .location("location") + .salary("salary") + .keywords("keywords") + .contractType(CDD) + .businessSector(BusinessSectorEnum.ASSURANCE) + .createdAt(createdAt) + .archive(false) + .valid(true) + .posterId(user.getId()) + .posterName(user.getUsername()) .build(); } @Test void toDtoTest() { - JobPostingDto jobPostingDto = jobPostingAdapter.toDto(jobPosting); - assertThat(jobPostingDto.getId()).isEqualTo(jobPosting.getId()); - assertThat(jobPostingDto.getTitle()).isEqualTo(jobPosting.getTitle()); - assertThat(jobPostingDto.getShortDescription()).isEqualTo(jobPosting.getShortDescription()); - assertThat(jobPostingDto.getDescription()).isEqualTo(jobPosting.getDescription()); - assertThat(jobPostingDto.getLocation()).isEqualTo(jobPosting.getLocation()); - assertThat(jobPostingDto.getSalary()).isEqualTo(jobPosting.getSalary()); - assertThat(jobPostingDto.getKeywords()).isEqualTo(jobPosting.getKeywords()); - assertThat(jobPostingDto.getContractType()).isEqualTo(CDD); - assertThat(jobPostingDto.getCreatedAt()).isEqualTo(jobPosting.getCreatedAt()); + assertThat(jobPostingDto).usingRecursiveComparison() + .isEqualTo(expectedJobPostingDto); } @Test void toModelTest() { final JobPostingDto dto = jobPostingAdapter.toDto(jobPosting); - final JobPosting expectedJobPosting = jobPostingAdapter.toModel(dto); + final JobPosting expectedJobPosting = jobPostingAdapter.toModel(dto, user); assertThat(jobPosting).usingRecursiveComparison() .isEqualTo(expectedJobPosting); diff --git a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobApplicationServiceTest.java b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobApplicationServiceTest.java index 7beeeeaa..5a3b19ba 100644 --- a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobApplicationServiceTest.java +++ b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobApplicationServiceTest.java @@ -58,8 +58,8 @@ class JobApplicationServiceTest extends ControllerIntegrationTestBase { void should_create_apply() { // given JobApplicationRequest request = new JobApplicationRequest(123L, PENDING, null); - JobPosting job = new JobPosting(123L, Company.builder().id(23L).build(), "Mon super job", "Il est trop cool", "Blablabla", "Paris", "140k", null, CDI, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true); final User currentUser = User.builder().id(45L).build(); + JobPosting job = new JobPosting(123L, Company.builder().id(23L).build(), "Mon super job", "Il est trop cool", "Blablabla", "Paris", "140k", null, CDI, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true, currentUser); JobApplication jobApplication = new JobApplication(67L, job, currentUser, request.getStatus(), Instant.now(), false); JobApplicationDto expectedDto = new JobApplicationDto(jobApplication.getId(), jobApplication.getJob().getId(), jobApplication.getJob().getTitle(), jobApplication.getJob().getCompany().getName(), jobApplication.getJob().getCompany().getLogo(), jobApplication.getStatus().name(), "Paris (75)", CDI, false); given(jobRepository.findById(anyLong())).willReturn(Optional.of(job)); @@ -103,8 +103,8 @@ void should_throw_exception_when_creating_with_already_applied_job() { JobApplicationRequest request = new JobApplicationRequest(jobId, PENDING, null); IllegalArgumentException expectedException = new IllegalArgumentException(String.format(APPLY_ALREADY_EXISTS_FOR_JOB, jobId)); final JobApplication apply = JobApplication.builder().id(123L).build(); - JobPosting job = new JobPosting(123L, Company.builder().id(23L).build(), "Mon super job", "Il est trop cool", "Blablabla", "Paris", "140k", null, CDI, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true); User currentUser = User.builder().id(123L).build(); + JobPosting job = new JobPosting(123L, Company.builder().id(23L).build(), "Mon super job", "Il est trop cool", "Blablabla", "Paris", "140k", null, CDI, BusinessSectorEnum.ASSURANCE, Instant.now(), false, true, currentUser); given(jobRepository.findById(anyLong())).willReturn(Optional.of(job)); given(authService.getCurrentUser()).willReturn(currentUser); given(applyRepository.findByJob_IdAndUser_id(anyLong(), anyLong())).willReturn(Optional.of(apply)); diff --git a/frontend-implicaction/src/app/auth/components/login/login.component.ts b/frontend-implicaction/src/app/auth/components/login/login.component.ts index 8d1895c3..001ea55a 100644 --- a/frontend-implicaction/src/app/auth/components/login/login.component.ts +++ b/frontend-implicaction/src/app/auth/components/login/login.component.ts @@ -67,7 +67,7 @@ export class LoginComponent implements OnInit { .subscribe( params => this.router .navigateByUrl(params.returnUrl || Univers.HOME.url) - .then(() => this.toaster.success('Félicitations', 'Vous êtes maintenant connecté')), + .then(() => this.toaster.success('Success', 'Login Successful')), error => console.log(error) ); } diff --git a/frontend-implicaction/src/app/shared/components/header/header.component.ts b/frontend-implicaction/src/app/shared/components/header/header.component.ts index 36387a8f..d019893f 100644 --- a/frontend-implicaction/src/app/shared/components/header/header.component.ts +++ b/frontend-implicaction/src/app/shared/components/header/header.component.ts @@ -59,7 +59,7 @@ export class HeaderComponent implements OnInit, OnDestroy { this.router .navigateByUrl('/') .then(() => { - this.toaster.success('Félicitations', 'Vous êtes deconnecté!'); + this.toaster.success('Success', 'You are now logged out!'); }); }); } diff --git a/frontend-implicaction/src/app/shared/models/job-posting.ts b/frontend-implicaction/src/app/shared/models/job-posting.ts index f0582269..a2cbda05 100644 --- a/frontend-implicaction/src/app/shared/models/job-posting.ts +++ b/frontend-implicaction/src/app/shared/models/job-posting.ts @@ -17,4 +17,6 @@ export interface JobPosting { apply?: boolean; archive?: boolean; active?: boolean; + posterId?: string; + posterName?: string; }