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-205: ajoute le champ posted_by a job posting #213

Merged
merged 13 commits into from
Dec 12, 2021
Merged
Show file tree
Hide file tree
Changes from 12 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 @@ -2,6 +2,7 @@

import com.dynonuggets.refonteimplicaction.dto.GroupDto;
import com.dynonuggets.refonteimplicaction.model.Group;
import com.dynonuggets.refonteimplicaction.model.User;
import com.dynonuggets.refonteimplicaction.service.FileService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
Expand All @@ -10,30 +11,37 @@

@Component
@AllArgsConstructor
public class SubredditAdapter {
public class GroupAdapter {

protected static final String DEFAULT_GROUP_IMAGE_URI = "assets/img/avatar-ia-group.png";

private FileService fileService;

public Group toModel(final GroupDto dto) {
public Group toModel(GroupDto dto, User user) {
return Group.builder()
.id(dto.getId())
.name(dto.getName())
.description(dto.getDescription())
.createdAt(dto.getCreatedAt())
.valid(dto.isValid())
.user(user)
.build();
}

public GroupDto toDto(Group model) {
final String imageUrl = model.getImage() != null ? fileService.buildFileUri(model.getImage().getObjectKey()) : DEFAULT_GROUP_IMAGE_URI;
final String username = model.getUser() != null ? model.getUser().getUsername() : "";
final Long userId = model.getUser() != null ? model.getUser().getId() : null;
return GroupDto.builder()
.id(model.getId())
.name(model.getName())
.numberOfPosts(isNotEmpty(model.getPosts()) ? model.getPosts().size() : 0)
.description(model.getDescription())
.createdAt(model.getCreatedAt())
.imageUrl(imageUrl)
.valid(model.isValid())
.username(username)
.userId(userId)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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()
Expand All @@ -29,10 +32,14 @@ public JobPostingDto toDto(JobPosting model) {
.contractType(model.getContractType())
.createdAt(model.getCreatedAt())
.archive(model.isArchive())
.businessSector(model.getBusinessSector())
.valid(model.isValid())
.posterName(model.getPoster().getUsername())
.posterId(model.getPoster().getId())
.build();
}

public JobPosting toModel(JobPostingDto dto) {
public JobPosting toModel(JobPostingDto dto, User user) {

Company company = companyAdapter.toModel(dto.getCompany());

Expand All @@ -46,8 +53,11 @@ public JobPosting toModel(JobPostingDto dto) {
.salary(dto.getSalary())
.keywords(dto.getKeywords())
.contractType(dto.getContractType())
.businessSector(dto.getBusinessSector())
.createdAt(dto.getCreatedAt())
.archive(dto.isArchive())
.valid(dto.isValid())
.poster(user)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.dynonuggets.refonteimplicaction.controller;

import com.dynonuggets.refonteimplicaction.dto.GroupDto;
import com.dynonuggets.refonteimplicaction.model.Group;
import com.dynonuggets.refonteimplicaction.service.GroupService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -14,8 +15,7 @@

import java.util.List;

import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.GET_ALL_BY_TOP_POSTING_URI;
import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.GROUPS_BASE_URI;
import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.*;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
Expand All @@ -35,21 +35,21 @@ public ResponseEntity<GroupDto> createSubreddit(@RequestPart("group") GroupDto g
return ResponseEntity.status(CREATED).body(saveDto);
}

@PostMapping
@PostMapping(CREATE_NO_IMAGE)
public ResponseEntity<GroupDto> createSubreddit(@RequestBody GroupDto group) {
final GroupDto saveDto = groupService.save(group);
return ResponseEntity.status(CREATED).body(saveDto);
}

@GetMapping
public ResponseEntity<Page<GroupDto>> getAll(
@GetMapping(GET_VALIDATED_GROUPS_URI)
public ResponseEntity<Page<GroupDto>> getAllValidGroups(
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "rows", defaultValue = "10") int rows,
@RequestParam(value = "sortBy", defaultValue = "id") String sortBy,
@RequestParam(value = "sortOrder", defaultValue = "ASC") String sortOrder
) {
Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy));
Page<GroupDto> subredditDtos = groupService.getAll(pageable);
Page<GroupDto> subredditDtos = groupService.getAllValidGroups(pageable);
return ResponseEntity.ok(subredditDtos);
}

Expand All @@ -58,4 +58,28 @@ public ResponseEntity<List<GroupDto>> getAllByTopPosting(@RequestParam int limit
List<GroupDto> groupDtos = groupService.getAllByTopPosting(limit);
return ResponseEntity.ok(groupDtos);
}

@PostMapping(SUBSCRIBE_GROUP)
public ResponseEntity<List<GroupDto>> subscribeGroup(@PathVariable final String groupName) {
final List<GroupDto> groupDtos = groupService.addGroup(groupName);
return ResponseEntity.ok(groupDtos);
}

@GetMapping(GET_PENDING_GROUP_URI)
public ResponseEntity<Page<GroupDto>> getAllPendingGroups(
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "rows", defaultValue = "10") int rows,
@RequestParam(value = "sortBy", defaultValue = "id") String sortBy,
@RequestParam(value = "sortOrder", defaultValue = "ASC") String sortOrder
) {
Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy));
Page<GroupDto> pendingGroups = groupService.getAllPendingGroups(pageable);
return ResponseEntity.ok(pendingGroups);
}

@PatchMapping(VALIDATE_GROUP_URI)
public ResponseEntity<Void> validateGroup(@RequestBody final Group group) {
groupService.validateGroup(group);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dynonuggets.refonteimplicaction.dto.JobPostingDto;
import com.dynonuggets.refonteimplicaction.exception.ImplicactionException;
import com.dynonuggets.refonteimplicaction.model.JobPosting;
import com.dynonuggets.refonteimplicaction.service.JobPostingService;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -43,7 +44,23 @@ public ResponseEntity<Page<JobPostingDto>> getAllByCriteria(
Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy));
final boolean applyCheck = Boolean.parseBoolean(checkApplyAsString);
final Boolean isArchive = StringUtils.isNotBlank(archiveAsString) ? Boolean.parseBoolean(archiveAsString) : null;
Page<JobPostingDto> jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, isArchive, applyCheck);
Page<JobPostingDto> jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, isArchive, applyCheck, null);
return ResponseEntity.ok(jobPostingDtos);
}

@GetMapping(VALIDATED_JOBS)
public ResponseEntity<Page<JobPostingDto>> getAllActiveByCriteria(
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "rows", defaultValue = "10") int rows,
@RequestParam(value = "sortBy", defaultValue = "id") String sortBy,
@RequestParam(value = "sortOrder", defaultValue = "ASC") String sortOrder,
@RequestParam(value = "search", defaultValue = "") String search,
@RequestParam(value = "contractType", required = false) String contractType,
@RequestParam(value = "archive", required = false) String archiveAsString
) {
Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy));
final Boolean isArchive = StringUtils.isNotBlank(archiveAsString) ? Boolean.parseBoolean(archiveAsString) : null;
Page<JobPostingDto> jobPostingDtos = jobPostingService.getAllActiveWithCriteria(pageable, search, contractType, isArchive);
return ResponseEntity.ok(jobPostingDtos);
}

Expand Down Expand Up @@ -76,4 +93,20 @@ public ResponseEntity<List<JobPostingDto>> toggleArchiveJobs(@RequestBody final
List<JobPostingDto> updated = jobPostingService.toggleArchiveAll(jobsId);
return ResponseEntity.ok(updated);
}

@GetMapping(GET_PENDING_JOB_URI)
public ResponseEntity<Page<JobPostingDto>> getAllPendingJobs(
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "rows", defaultValue = "10") int rows
) {
Pageable pageable = PageRequest.of(page, rows);
Page<JobPostingDto> pendingJobs = jobPostingService.getAllPendingJobs(pageable);
return ResponseEntity.ok(pendingJobs);
}

@PatchMapping(VALIDATE_JOB_URI)
public ResponseEntity<Void> validateJob(@RequestBody final JobPosting job) {
jobPostingService.validateJob(job);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.dynonuggets.refonteimplicaction.controller;

import com.dynonuggets.refonteimplicaction.dto.GroupDto;
import com.dynonuggets.refonteimplicaction.dto.UserDto;
import com.dynonuggets.refonteimplicaction.service.AuthService;
import com.dynonuggets.refonteimplicaction.service.GroupService;
import com.dynonuggets.refonteimplicaction.service.RelationService;
import com.dynonuggets.refonteimplicaction.service.UserService;
import lombok.AllArgsConstructor;
Expand All @@ -12,6 +14,8 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

import static com.dynonuggets.refonteimplicaction.utils.ApiUrls.*;

@RestController
Expand All @@ -22,6 +26,7 @@ public class UserController {
private final UserService userService;
private final RelationService relationService;
private final AuthService authService;
private final GroupService groupService;

@GetMapping
public ResponseEntity<Page<UserDto>> getAll(
Expand Down Expand Up @@ -103,4 +108,11 @@ public ResponseEntity<UserDto> updateImageProfile(@RequestParam("file") Multipar
final UserDto userDto = userService.updateImageProfile(file);
return ResponseEntity.ok(userDto);
}

@GetMapping(GET_USER_GROUPS_URI)
public ResponseEntity<List<GroupDto>> getUserGroups(@PathVariable("userId") Long userId) {
final List<GroupDto> groupsDto = userService.getUserGroups(userId);
return ResponseEntity.ok(groupsDto);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.*;

import java.time.Instant;
import java.util.List;

@Data
@Builder
Expand All @@ -17,4 +18,8 @@ public class GroupDto {
private Integer numberOfPosts;
private String imageUrl;
private Instant createdAt;
private boolean valid;
private List<UserDto> users;
private String username;
private Long userId;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dynonuggets.refonteimplicaction.dto;

import com.dynonuggets.refonteimplicaction.model.BusinessSectorEnum;
import com.dynonuggets.refonteimplicaction.model.ContractTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -23,8 +24,11 @@ public class JobPostingDto {
private String salary;
private String keywords;
private ContractTypeEnum contractType;
private BusinessSectorEnum businessSector;
private Instant createdAt;
private boolean archive;
private boolean apply;

private boolean valid;
private Long posterId;
private String posterName;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.dynonuggets.refonteimplicaction.model;

public enum BusinessSectorEnum {
AGROALIMENTAIRE, BANQUE, ASSURANCE, IMPRIMERIE, BTP, CHIMIE, COMMERCE, EDITION, COMMUNICATION, ELECTRONIQUE,
ETUDES_ET_CONSEILS, INDUSTRIE_PHARMACEUTIQUE, INFORMATIQUE, TELECOMS, AUTOMOBILE, METALLURGIE, SERVICES_AUX_ENTREPRISES,
TEXTILE, TRANSPORTS, LOGISTIQUE
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,7 @@ public class Group {

@ManyToMany(fetch = FetchType.LAZY, cascade = ALL, mappedBy = "groups")
private List<User> users;

@Column(name = "valid")
private boolean valid;
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,20 @@ public class JobPosting {
@Enumerated(EnumType.STRING)
private ContractTypeEnum contractType;

@Enumerated(EnumType.STRING)
private BusinessSectorEnum businessSector;

@Column(name = "created_at")
private Instant createdAt;

@Column(columnDefinition = "boolean default false")
private boolean archive;

@Column(name = "valid")
private boolean valid;

@ManyToOne
@JoinColumn(name = "posted_by")
private User poster;

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package com.dynonuggets.refonteimplicaction.repository;

import com.dynonuggets.refonteimplicaction.model.Group;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface SubredditRepository extends JpaRepository<Group, Long> {
public interface GroupRepository extends JpaRepository<Group, Long> {
@Query("select s from Group s order by s.posts.size desc")
List<Group> findAllByTopPosting(Pageable pageable);

Optional<Group> findByName(String name);

Page<Group> findAllByValidIsFalse(Pageable pageable);

Page<Group> findAllByValidIsTrue(Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.dynonuggets.refonteimplicaction.repository;

import com.dynonuggets.refonteimplicaction.model.JobPosting;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface JobPostingRepository extends JpaRepository<JobPosting, Long>, JobPostingRepositoryCustom {

Page<JobPosting> findAllByValidIsFalse(Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ public interface JobPostingRepositoryCustom {
* @param pageable l'objet de pagination
* @param search la chaîne de caratères à rechercher dans les champs title, description, keywords
* @param contractType le type de contrat à rechercher (CDD, CDI)
* @param valid la validation de l'offre par l'administrateur
* @return la liste de résultats paginée des JobPostings correspondant aux critères
*/
Page<JobPosting> findAllWithCriteria(final Pageable pageable, final String search, final String contractType, final Boolean archive);
Page<JobPosting> findAllWithCriteria(final Pageable pageable, final String search, final String contractType, final Boolean archive, Boolean valid);

}
Loading