Skip to content
Extraits de code Groupes Projets
Valider 2043a8e2 rédigé par Mohamed Lemine BAILLAHI's avatar Mohamed Lemine BAILLAHI
Parcourir les fichiers

Merge branch 'feature/MLC-260' into 'develop'

MLC-260/implement full CRUD operations for contract management

Closes MLC-260

See merge request !2
parents 6ea51ee1 dd584fc3
Branches
1 requête de fusion!2MLC-260/implement full CRUD operations for contract management
Affichage de
avec 1027 ajouts et 8 suppressions
## [1.0.0]
-
- feature/MLC-260 : implement full CRUD operations for contract management
Ce diff est replié.
......@@ -33,7 +33,12 @@
<dependency>
<groupId>com.marketingconfort</groupId>
<artifactId>mobiloca-common</artifactId>
<version>0.0.6-RELEASE</version>
<version>0.0.11-RELEASE</version>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
......
package com.marketingconfort.mobiloca.config;
import org.modelmapper.ModelMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ModelMapperConfig {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
package com.marketingconfort.mobiloca.constants;
public class ApiPaths {
}
package com.marketingconfort.mobiloca.constants;
public class Message {
public static final String CONTRACT_NOT_FOUND = "Contract not found";
}
package com.marketingconfort.mobiloca.constants;
public class Paths {
public static final String BASE_URL = "/api/reservation";
public static final String CONTRACT_BASE = BASE_URL + "/contract";
public static final String ALL_CONTRACTS = "";
public static final String CONTRACT_BY_ID = "/{id}";
public static final String UPDATE_CONTRACT_STATUS = "/update-status/{id}";
}
package com.marketingconfort.mobiloca.controller;
import com.marketingconfort.mobiloca.common.Reservation.enums.ContractStatus;
import com.marketingconfort.mobiloca.constants.Paths;
import com.marketingconfort.mobiloca.dto.ContractDTO;
import com.marketingconfort.mobiloca.service.ContractService;
import com.marketingconfort.starter.core.exceptions.FunctionalException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
@RestController
@RequestMapping(Paths.CONTRACT_BASE)
@RequiredArgsConstructor
public class ContractController {
private final ContractService contractService;
@GetMapping(Paths.CONTRACT_BY_ID)
public ResponseEntity<ContractDTO> getContractById(@PathVariable Long id) throws FunctionalException {
ContractDTO dto = contractService.getContractById(id);
return ResponseEntity.ok(dto);
}
@GetMapping(Paths.ALL_CONTRACTS)
public ResponseEntity<Page<ContractDTO>> getAllContracts(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "id") String sortBy,
@RequestParam(defaultValue = "DESC") String sortDirection,
@RequestParam(required = false) String search,
@RequestParam(required = false) String statusSearch,
@RequestParam(required = false) String reservationSearch,
@RequestParam(required = false) String registrationSearch,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate
) throws FunctionalException {
Page<ContractDTO> contracts = contractService.getAllContracts(
page, size, sortBy, sortDirection,
search, statusSearch, reservationSearch,
registrationSearch, startDate, endDate
);
return ResponseEntity.ok(contracts);
}
@PostMapping(Paths.UPDATE_CONTRACT_STATUS)
public ResponseEntity<Void> changeContractStatus(
@PathVariable Long id,
@RequestParam ContractStatus newStatus) throws FunctionalException {
contractService.changeContractStatus(id, newStatus);
return ResponseEntity.ok().build();
}
@PostMapping("/delete")
public ResponseEntity<Void> deleteContract(@RequestParam Long id) throws FunctionalException {
contractService.deleteContract(id);
return ResponseEntity.noContent().build();
}
}
package com.marketingconfort.mobiloca.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ClientDTO {
private Long id;
private String firstname;
private String lastname;
}
package com.marketingconfort.mobiloca.dto;
import com.marketingconfort.mobiloca.common.Reservation.enums.ContractStatus;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ContractDTO {
private Long id;
private SingleReservationDTO reservation;
private VehicleDTO vehicle;
private ClientDTO client;
private ContractStatus status;
private Double depositAmount;
private Double totalAmount;
}
package com.marketingconfort.mobiloca.dto;
public class ReservationDTO {
}
package com.marketingconfort.mobiloca.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDate;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class SingleReservationDTO {
private Long id;
private LocalDate pickupDate;
private LocalDate returnDate;
}
package com.marketingconfort.mobiloca.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class VehicleDTO {
private Long id;
private String brand;
private String model;
private String registration;
private Double price;
}
package com.marketingconfort.mobiloca.mapper;
import com.marketingconfort.mobiloca.common.Reservation.models.Contract;
import com.marketingconfort.mobiloca.dto.ContractDTO;
import lombok.AllArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Component;
@Component
@AllArgsConstructor
public class ContractMapper {
private final ModelMapper modelMapper;
public ContractDTO toDto(Contract contract) {
return modelMapper.map(contract, ContractDTO.class);
}
public Contract toEntity(ContractDTO dto) {
return modelMapper.map(dto, Contract.class);
}
}
package com.marketingconfort.mobiloca.repository;
import com.marketingconfort.mobiloca.common.Reservation.models.Contract;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface ContractRepository extends JpaRepository<Contract, Long>, JpaSpecificationExecutor<Contract> {
}
package com.marketingconfort.mobiloca.repository;
public interface ReservationRepository {
public interface SingleReservationRepository {
}
package com.marketingconfort.mobiloca.service;
import com.marketingconfort.mobiloca.dto.ClientDTO;
public interface ClientService {
ClientDTO getClientById(Long id);
}
package com.marketingconfort.mobiloca.service;
import com.marketingconfort.mobiloca.common.Reservation.enums.ContractStatus;
import com.marketingconfort.mobiloca.dto.ContractDTO;
import com.marketingconfort.starter.core.exceptions.FunctionalException;
import org.springframework.data.domain.Page;
import java.time.LocalDate;
public interface ContractService {
ContractDTO getContractById(Long id) throws FunctionalException;
public Page<ContractDTO> getAllContracts(
int page,
int size,
String sortBy,
String sortDirection,
String search,
String statusSearch,
String reservationSearch,
String registrationSearch,
LocalDate startDate,
LocalDate endDate
) throws FunctionalException;
public void changeContractStatus(Long id, ContractStatus newStatus) throws FunctionalException;
public void deleteContract(Long id) throws FunctionalException;
}
package com.marketingconfort.mobiloca.service;
public interface ReservationService {
public interface SingleReservationService {
}
package com.marketingconfort.mobiloca.service;
import com.marketingconfort.mobiloca.dto.VehicleDTO;
public interface VehicleService {
VehicleDTO getVehicleById(Long id);
}
package com.marketingconfort.mobiloca.service.impl;
import com.marketingconfort.mobiloca.dto.ClientDTO;
import com.marketingconfort.mobiloca.service.ClientService;
import com.marketingconfort.starter.core.services.MCRestTemplateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class ClientServiceImpl implements ClientService {
private final MCRestTemplateService mcRestTemplateService;
@Value("${external.user.service.url}")
private String clientServiceUrl;
@Override
public ClientDTO getClientById(Long id) {
try {
String url = clientServiceUrl + "/" + id;
ResponseEntity<ClientDTO> response = mcRestTemplateService.getForObject(url, ClientDTO.class);
return response.getBody();
} catch (Exception e) {
log.error("Failed to fetch client with id {}", id, e);
return 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