该程序应该找出公寓是否在某个日期被预订,如果没有,那么我们预订它,如果是,则显示一条消息它已被预订。我的程序是如何工作的:
第一次运行:使用我们想要预订的信息发出 Post2020-03-12
请求2020-03-19
。程序保存。如果我们再提出一个完全相同的请求,程序会再次保存信息。
第二遍:我们发出一个 Post 请求,其中包含我们想要预订的2020-03-12
信息2020-03-19
。该程序写道,公寓已经被占用。我们提出了一个新的 Post-request,我们想预订2020-04-12
by 2020-04-19
,程序保存信息。如果我们再提出一个完全相同的请求,程序将再次保存。
查询是如何在数据库中实现的:我们在数据库Contract
中搜索新的. 因此,可以找到一个有效的或丢失的,如果它丢失了,那么您可以创建一个新的。id House
end_date
start_date
Contract
Contract
因为我想在控制器中进行检查:如果请求没有返回任何内容,那么我们可以将新合同保存到数据库中,否则我们进入条件并保存它。
问题是什么:如何正确建立数据正确保存的条件?因为重复保存不应该在同一日期。
控制器:
@PostMapping("/rent")
@PreAuthorize("hasAuthority('user:write')")
public String homeRent(@RequestBody ContractDto contractDto) {
List<Contract> con = contractService.findContractByHouseIdAndEndDateAfter(contractDto.getHouseId(), contractDto.getEndDate());
if(con.isEmpty()) {
Contract contract = new Contract();
contract.setHouse(houseService.findById(contractDto.getHouseId()));
contract.setUser(userService.findById(contractDto.getTenantId()));
contract.setStartDate(contractDto.getStartDate());
contract.setEndDate(contractDto.getEndDate());
contractService.save(contract);
return "Квартира забронирована";
}
return "Квартира занята";
}
回购
@Repository
public interface ContractRepository extends JpaRepository<Contract, Long> {
List<Contract> findContractByHouseIdAndEndDateAfter(Long houseId, LocalDate from);
}
我假设在应用程序的这个实现中,您需要查看客户想要预订房间的日期间隔。如果此查询返回某些内容,则查询不应将合同保存在数据库中,如果返回 null,则我们创建一个新合同。