Skip to content
Extraits de code Groupes Projets
Valider 4e7a879e rédigé par aicha.elyamalhi's avatar aicha.elyamalhi
Parcourir les fichiers

improve client search by supporting partial ID and case-insensitive status and...

improve client search by supporting partial ID and case-insensitive status and add cin attribute in user dto
parent 0616068b
Branches
1 requête de fusion!3MLC-295/improve client search by supporting partial ID and case-insensitive status and...
......@@ -34,7 +34,7 @@
<dependency>
<groupId>com.marketingconfort</groupId>
<artifactId>mobiloca-common</artifactId>
<version>0.0.2-RELEASE</version>
<version>0.0.10-RELEASE</version>
</dependency>
<dependency>
......
package com.marketingconfort.mobiloca.constants;
public class Paths {
public static final String BASE_URL = "/api/users";
public static final String BASE_URL = "/api/user";
public static final String CLIENT_BASE = BASE_URL+"/clients";
public static final String ALL_CLIENTS= "/all";
public static final String ADD_CLIENT = "/add";
public static final String UPDATE_CLIENT = "/update";
public static final String UPDATE_CLIENT = "/update/{id}";
public static final String CLIENT_BY_ID = "/{id}";
public static final String UPDATE_CLIENT_STATUS = "/{id}/status";
......
......@@ -37,8 +37,11 @@ public class ClientController {
return new ResponseEntity<>(clientDTO, HttpStatus.OK);
}
@PostMapping (Paths.UPDATE_CLIENT)
public ResponseEntity<ClientResponseDTO> updateClient(@ModelAttribute ClientRequestDTO request ) throws FunctionalException, S3FunctionalException {
public ResponseEntity<ClientResponseDTO> updateClient(
@PathVariable Long id,
@ModelAttribute ClientRequestDTO request) throws FunctionalException, S3FunctionalException {
request.setId(id);
ClientResponseDTO savedClient = clientService.updateClient(request);
return ResponseEntity.status(HttpStatus.OK).body(savedClient);
}
......@@ -49,6 +52,7 @@ public class ClientController {
@RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "createdDate") String sortBy,
@RequestParam(defaultValue = "DESC") String sortDirection,
@RequestParam(required = false) String idSearch,
@RequestParam(required = false) String nameSearch,
@RequestParam(required = false) String statusSearch,
@RequestParam(required = false) String cinSearch,
......@@ -58,7 +62,7 @@ public class ClientController {
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate
) {
Page<ClientResponseDTO> clients = clientService.getAllClients(
page, size, sortBy, sortDirection, nameSearch, statusSearch, cinSearch, phoneNumberSearch, createdDate, startDate, endDate
page, size, sortBy, sortDirection, idSearch, nameSearch, statusSearch, cinSearch, phoneNumberSearch, createdDate, startDate, endDate
);
return ResponseEntity.ok(clients);
}
......
......@@ -12,17 +12,15 @@ import java.time.LocalDate;
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {
private Long id;
private String firstName;
private String lastName;
private String cin;
private String phoneNumber;
private String email;
private UserStatus status;
private AddressDTO primaryAddress;
private String photoUrl;
private LocalDate createdDate;
}
......@@ -11,7 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ClientRequestDTO extends UserDTO {
public class ClientRequestDTO extends UserRequestDTO {
private MultipartFile photo;
private MultipartFile drivingLicenseFile;
}
package com.marketingconfort.mobiloca.dto.request;
import com.marketingconfort.mobiloca.dto.AddressDTO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserRequestDTO {
private Long id;
private String firstName;
private String lastName;
private String phoneNumber;
private String email;
private String cin;
private AddressDTO primaryAddress;
private String photoUrl;
}
......@@ -21,6 +21,7 @@ public interface ClientService {
int size,
String sortBy,
String sortDirection,
String idSearch,
String search,
String statusSearch,
String cinSearch,
......
......@@ -121,6 +121,7 @@ public class ClientServiceImpl implements ClientService {
int size,
String sortBy,
String sortDirection,
String idSearch,
String nameSearch,
String statusSearch,
String cinSearch,
......@@ -137,7 +138,13 @@ public class ClientServiceImpl implements ClientService {
Specification<Client> spec = Specification.where(null);
// Recherche globale sur nom, prénom, email
if (idSearch != null && !idSearch.isBlank()) {
String pattern = "%" + idSearch + "%";
spec = spec.and((root, query, cb) ->
cb.like(cb.concat("", root.get("id").as(String.class)), pattern)
);
}
if (nameSearch != null && !nameSearch.isBlank()) {
String pattern = "%" + nameSearch.toLowerCase() + "%";
spec = spec.and((root, query, cb) -> cb.or(
......@@ -148,8 +155,9 @@ public class ClientServiceImpl implements ClientService {
}
if (statusSearch != null && !statusSearch.isBlank()) {
String pattern = "%" + statusSearch.toLowerCase() + "%";
spec = spec.and((root, query, cb) ->
cb.equal(root.get("status"), UserStatus.valueOf(statusSearch))
cb.like(cb.lower(root.get("status").as(String.class)), pattern)
);
}
......@@ -166,9 +174,11 @@ public class ClientServiceImpl implements ClientService {
}
if (createdDate != null) {
spec = spec.and((root, query, cb) ->
cb.equal(root.get("createdDate"), createdDate)
);
spec = spec.and((root, query, cb) -> cb.between(
root.get("createdDate"),
createdDate.atStartOfDay().toLocalDate(),
createdDate.plusDays(1)
));
}
if (startDate != null) {
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter