diff --git a/pom.xml b/pom.xml
index 46596bf..81ba5ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
2.1.0
- org.liquibase
+ org.liquibase
liquibase-core
${liquibase.version}
@@ -49,9 +49,9 @@
${liquibase.version}
- mysql
- mysql-connector-java
- 8.0.33
+ com.mysql
+ mysql-connector-j
+ 8.1.0
org.projectlombok
@@ -79,9 +79,9 @@
${mapstruct.version}
- jakarta.validation
- jakarta.validation-api
- 2.0.2
+ com.stripe
+ stripe-java
+ 23.7.0
org.telegram
@@ -164,5 +164,4 @@
-
diff --git a/src/main/java/com/project/carsharingapp/controller/PaymentController.java b/src/main/java/com/project/carsharingapp/controller/PaymentController.java
new file mode 100644
index 0000000..6bc634f
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/controller/PaymentController.java
@@ -0,0 +1,52 @@
+package com.project.carsharingapp.controller;
+
+import com.project.carsharingapp.dto.payment.CreatePaymentSessionRequestDto;
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.service.PaymentService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@Tag(name = "Payment management", description = "Endpoint for managing payments")
+@RestController
+@RequestMapping("/payments")
+@RequiredArgsConstructor
+public class PaymentController {
+ private final PaymentService paymentService;
+
+ @GetMapping
+ @Operation(summary = "Get all user's payments")
+ public List getAll(Pageable pageable) {
+ return paymentService.getAll(pageable);
+ }
+
+ @PostMapping
+ @Operation(summary = "Create a new payment session")
+ public Payment create(
+ @RequestBody @Valid CreatePaymentSessionRequestDto requestDto
+ ) {
+ return paymentService.create(requestDto);
+ }
+
+ @GetMapping("/success")
+ @Operation(summary = "Redirect endpoint in case of successful payment")
+ private String redirectToSuccessPage(@RequestParam String sessionId) {
+ paymentService.updateStatus(sessionId);
+ return "success";
+ }
+
+ @GetMapping("/cancel")
+ @Operation(summary = "Redirect endpoint in case of paused payment")
+ private String redirectToFailedPage() {
+ return "cancel";
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/controller/RentalController.java b/src/main/java/com/project/carsharingapp/controller/RentalController.java
index 2d91247..9147995 100644
--- a/src/main/java/com/project/carsharingapp/controller/RentalController.java
+++ b/src/main/java/com/project/carsharingapp/controller/RentalController.java
@@ -2,7 +2,6 @@
import com.project.carsharingapp.dto.rental.CreateRentalRequestDto;
import com.project.carsharingapp.dto.rental.RentalDto;
-import com.project.carsharingapp.dto.rental.SetActualReturnDateRequestDto;
import com.project.carsharingapp.service.rental.RentalService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -57,7 +56,7 @@ public RentalDto getById(@PathVariable Long id) {
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "Set actual return date",
description = "Set actual return date and increase car inventory by 1")
- public RentalDto setActualReturnDay(Long id) { // Authnetication
+ public RentalDto setActualReturnDay(Long id) {
return rentalService.setActualReturnDay(id);
}
}
diff --git a/src/main/java/com/project/carsharingapp/dto/payment/CreatePaymentSessionRequestDto.java b/src/main/java/com/project/carsharingapp/dto/payment/CreatePaymentSessionRequestDto.java
new file mode 100644
index 0000000..47450f2
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/dto/payment/CreatePaymentSessionRequestDto.java
@@ -0,0 +1,14 @@
+package com.project.carsharingapp.dto.payment;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CreatePaymentSessionRequestDto {
+ @NotNull
+ private Long rentalId;
+ @NotNull
+ private String type;
+}
diff --git a/src/main/java/com/project/carsharingapp/dto/payment/PaymentResponseDto.java b/src/main/java/com/project/carsharingapp/dto/payment/PaymentResponseDto.java
new file mode 100644
index 0000000..7fba6ec
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/dto/payment/PaymentResponseDto.java
@@ -0,0 +1,4 @@
+package com.project.carsharingapp.dto.payment;
+
+public class PaymentResponseDto {
+}
diff --git a/src/main/java/com/project/carsharingapp/dto/rental/RentalSearchParametersDto.java b/src/main/java/com/project/carsharingapp/dto/rental/RentalSearchParametersDto.java
index 3d8ffd1..3480660 100644
--- a/src/main/java/com/project/carsharingapp/dto/rental/RentalSearchParametersDto.java
+++ b/src/main/java/com/project/carsharingapp/dto/rental/RentalSearchParametersDto.java
@@ -1,5 +1,7 @@
package com.project.carsharingapp.dto.rental;
-public record RentalSearchParametersDto(String[] userId,
- String[] isActive) {
-}
\ No newline at end of file
+public record RentalSearchParametersDto(
+ String[] userId,
+ String[] isActive
+) {
+}
diff --git a/src/main/java/com/project/carsharingapp/model/Payment.java b/src/main/java/com/project/carsharingapp/model/Payment.java
index 35c03c0..d16e290 100644
--- a/src/main/java/com/project/carsharingapp/model/Payment.java
+++ b/src/main/java/com/project/carsharingapp/model/Payment.java
@@ -31,7 +31,7 @@ public class Payment {
private Type type;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "rental_id", nullable = false)
- private Rental rentalId;
+ private Rental rental;
@Column(name = "session_url", nullable = false)
private String sessionUrl;
@Column(name = "session_id", nullable = false)
diff --git a/src/main/java/com/project/carsharingapp/repository/PaymentRepository.java b/src/main/java/com/project/carsharingapp/repository/PaymentRepository.java
index 6755b06..00b0fec 100644
--- a/src/main/java/com/project/carsharingapp/repository/PaymentRepository.java
+++ b/src/main/java/com/project/carsharingapp/repository/PaymentRepository.java
@@ -1,8 +1,13 @@
package com.project.carsharingapp.repository;
import com.project.carsharingapp.model.Payment;
+import java.util.Optional;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PaymentRepository extends JpaRepository {
+ Optional findBySessionId(String sessionId);
+ Page findAll(Pageable pageable);
}
diff --git a/src/main/java/com/project/carsharingapp/repository/rentals/RentalRepository.java b/src/main/java/com/project/carsharingapp/repository/rentals/RentalRepository.java
index d3923fd..f43194f 100644
--- a/src/main/java/com/project/carsharingapp/repository/rentals/RentalRepository.java
+++ b/src/main/java/com/project/carsharingapp/repository/rentals/RentalRepository.java
@@ -9,11 +9,10 @@
@Repository
public interface RentalRepository extends JpaRepository {
+ @Query("FROM Rental r LEFT JOIN FETCH r.car "
+ + "LEFT JOIN FETCH r.user WHERE r.id = :id")
+ Optional findById(Long id);
+
@Query("FROM Rental r WHERE r.user.id = :userId AND r.isActive = :isActive")
List findRentalsByUserIdAndActiveStatus(Long userId, boolean isActive);
-
-// @Query("FROM Rental r WHERE r.user.id = :userId AND r.isActive = :isActive")
-// OptionalfindRentalByUserIdAndActiveStatus(Long userId, boolean isActive);
-
-
}
diff --git a/src/main/java/com/project/carsharingapp/repository/rentals/spec/UserSpecificationProvider.java b/src/main/java/com/project/carsharingapp/repository/rentals/spec/UserSpecificationProvider.java
index df05312..ad7f03e 100644
--- a/src/main/java/com/project/carsharingapp/repository/rentals/spec/UserSpecificationProvider.java
+++ b/src/main/java/com/project/carsharingapp/repository/rentals/spec/UserSpecificationProvider.java
@@ -1,6 +1,5 @@
package com.project.carsharingapp.repository.rentals.spec;
-
import static com.project.carsharingapp.repository.rentals.RentalSpecificationBuilder.USER_ID_KEY;
import com.project.carsharingapp.model.Rental;
diff --git a/src/main/java/com/project/carsharingapp/service/PaymentAmountHandler.java b/src/main/java/com/project/carsharingapp/service/PaymentAmountHandler.java
new file mode 100644
index 0000000..c2726c2
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/PaymentAmountHandler.java
@@ -0,0 +1,10 @@
+package com.project.carsharingapp.service;
+
+import com.project.carsharingapp.model.Payment;
+import java.math.BigDecimal;
+
+public interface PaymentAmountHandler {
+ Long getPaymentAmount(BigDecimal dailyFee, int numberOfDays);
+
+ boolean isApplicable(Payment.Type type);
+}
diff --git a/src/main/java/com/project/carsharingapp/service/PaymentService.java b/src/main/java/com/project/carsharingapp/service/PaymentService.java
new file mode 100644
index 0000000..2607316
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/PaymentService.java
@@ -0,0 +1,14 @@
+package com.project.carsharingapp.service;
+
+import com.project.carsharingapp.dto.payment.CreatePaymentSessionRequestDto;
+import com.project.carsharingapp.model.Payment;
+import java.util.List;
+import org.springframework.data.domain.Pageable;
+
+public interface PaymentService {
+ Payment create(CreatePaymentSessionRequestDto requestDto);
+
+ Payment updateStatus(String sessionId);
+
+ List getAll(Pageable pageable);
+}
diff --git a/src/main/java/com/project/carsharingapp/service/impl/FineAmountHandler.java b/src/main/java/com/project/carsharingapp/service/impl/FineAmountHandler.java
new file mode 100644
index 0000000..0acaaf9
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/impl/FineAmountHandler.java
@@ -0,0 +1,21 @@
+package com.project.carsharingapp.service.impl;
+
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.service.PaymentAmountHandler;
+import java.math.BigDecimal;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FineAmountHandler implements PaymentAmountHandler {
+ private static final BigDecimal FINE_MULTIPLIER = BigDecimal.valueOf(1.25);
+
+ @Override
+ public Long getPaymentAmount(BigDecimal dailyFee, int numberOfDays) {
+ return dailyFee.multiply(FINE_MULTIPLIER).longValue() * numberOfDays;
+ }
+
+ @Override
+ public boolean isApplicable(Payment.Type type) {
+ return type.equals(Payment.Type.FINE);
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/service/impl/PaymentAmountHandlerStrategy.java b/src/main/java/com/project/carsharingapp/service/impl/PaymentAmountHandlerStrategy.java
new file mode 100644
index 0000000..24551ab
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/impl/PaymentAmountHandlerStrategy.java
@@ -0,0 +1,24 @@
+package com.project.carsharingapp.service.impl;
+
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.service.PaymentAmountHandler;
+import java.util.List;
+import java.util.NoSuchElementException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PaymentAmountHandlerStrategy {
+ @Autowired
+ private List paymentAmountHandlers;
+
+ public PaymentAmountHandler getHandler(Payment.Type type) {
+ return paymentAmountHandlers.stream()
+ .filter(paymentAmountHandler -> paymentAmountHandler.isApplicable(type))
+ .findAny()
+ .orElseThrow(() ->
+ new NoSuchElementException("Can't find a PaymentAmountHandler "
+ + "for such type as: " + type)
+ );
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/service/impl/PaymentServiceImpl.java b/src/main/java/com/project/carsharingapp/service/impl/PaymentServiceImpl.java
new file mode 100644
index 0000000..250e2ca
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/impl/PaymentServiceImpl.java
@@ -0,0 +1,66 @@
+package com.project.carsharingapp.service.impl;
+
+import com.project.carsharingapp.dto.payment.CreatePaymentSessionRequestDto;
+import com.project.carsharingapp.exception.EntityNotFoundException;
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.model.Rental;
+import com.project.carsharingapp.repository.PaymentRepository;
+import com.project.carsharingapp.repository.rentals.RentalRepository;
+import com.project.carsharingapp.service.PaymentService;
+import com.stripe.exception.StripeException;
+import com.stripe.model.checkout.Session;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor
+public class PaymentServiceImpl implements PaymentService {
+ private final RentalRepository rentalRepository;
+ private final PaymentRepository paymentRepository;
+ private final StripeService stripeService;
+
+ @Override
+ public Payment create(CreatePaymentSessionRequestDto requestDto) {
+ Rental rental = rentalRepository.findById(requestDto.getRentalId()).orElseThrow(
+ () -> new EntityNotFoundException("Can't find a Rental by id: "
+ + requestDto.getRentalId())
+ );
+ Payment.Type type = Payment.Type.valueOf(requestDto.getType());
+ try {
+ Session session = stripeService.createSession(rental, type);
+ Payment payment = generatePayment(session, rental, type);
+ return paymentRepository.save(payment);
+ } catch (StripeException e) {
+ throw new RuntimeException("Can't create a stripe checkout session!");
+ }
+ }
+
+ @Override
+ public Payment updateStatus(String sessionId) {
+ Payment payment = paymentRepository.findBySessionId(sessionId).orElseThrow(
+ () -> new EntityNotFoundException("Can't find a Payment by the session")
+ );
+ payment.setStatus(Payment.Status.PAID);
+ return paymentRepository.save(payment);
+ }
+
+ @Override
+ public List getAll(Pageable pageable) {
+ return paymentRepository.findAll(pageable).stream().collect(Collectors.toList());
+ }
+
+ private Payment generatePayment(Session session, Rental rental, Payment.Type type) {
+ Payment payment = new Payment();
+ payment.setStatus(Payment.Status.PENDING);
+ payment.setType(type);
+ payment.setRental(rental);
+ payment.setSessionUrl(session.getUrl());
+ payment.setSessionId(session.getId());
+ payment.setAmount(BigDecimal.valueOf(session.getAmountTotal()));
+ return payment;
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/service/impl/RegularPaymentAmountHandler.java b/src/main/java/com/project/carsharingapp/service/impl/RegularPaymentAmountHandler.java
new file mode 100644
index 0000000..a8fbf31
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/impl/RegularPaymentAmountHandler.java
@@ -0,0 +1,19 @@
+package com.project.carsharingapp.service.impl;
+
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.service.PaymentAmountHandler;
+import java.math.BigDecimal;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RegularPaymentAmountHandler implements PaymentAmountHandler {
+ @Override
+ public Long getPaymentAmount(BigDecimal dailyFee, int numberOfDays) {
+ return dailyFee.longValue() * numberOfDays;
+ }
+
+ @Override
+ public boolean isApplicable(Payment.Type type) {
+ return type.equals(Payment.Type.PAYMENT);
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/service/impl/StripeService.java b/src/main/java/com/project/carsharingapp/service/impl/StripeService.java
new file mode 100644
index 0000000..8b33ad8
--- /dev/null
+++ b/src/main/java/com/project/carsharingapp/service/impl/StripeService.java
@@ -0,0 +1,93 @@
+package com.project.carsharingapp.service.impl;
+
+import com.project.carsharingapp.model.Payment;
+import com.project.carsharingapp.model.Rental;
+import com.project.carsharingapp.service.PaymentAmountHandler;
+import com.stripe.Stripe;
+import com.stripe.exception.StripeException;
+import com.stripe.model.checkout.Session;
+import com.stripe.param.checkout.SessionCreateParams;
+import jakarta.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.Period;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.util.UriComponentsBuilder;
+
+@Service
+@RequiredArgsConstructor
+public class StripeService {
+ private static final String DEFAULT_URL_PART = "/api/payments";
+ private static final String SUCCESS_ENDPOINT = "success";
+ private static final String CANCEL_ENDPOINT = "cancel";
+ private static final Long STANDARD_QUANTITY_OF_RENTAL_CART = 1L;
+ private static final String DEFAULT_CURRENCY = "USD";
+
+ private final PaymentAmountHandlerStrategy handler;
+ @Value("${stripe.secret}")
+ private String secretKey;
+ @Value("${app.host}")
+ private String host;
+ @Value("${app.port}")
+ private Integer port;
+
+ @PostConstruct
+ public void init() {
+ Stripe.apiKey = secretKey;
+ }
+
+ public Session createSession(Rental rental, Payment.Type type) throws StripeException {
+ String productName = rental.getCar().getModel();
+ Long price = calculateTotalAmount(rental, type);
+ SessionCreateParams params = SessionCreateParams.builder()
+ .setMode(SessionCreateParams.Mode.PAYMENT)
+ .setSuccessUrl(createUrl(SUCCESS_ENDPOINT))
+ .setCancelUrl(createUrl(CANCEL_ENDPOINT))
+ .addLineItem(
+ SessionCreateParams.LineItem.builder()
+ .setPriceData(
+ SessionCreateParams.LineItem.PriceData.builder()
+ .setCurrency(DEFAULT_CURRENCY)
+ .setProductData(
+ SessionCreateParams.LineItem.PriceData
+ .ProductData.builder()
+ .setName(productName)
+ .build()
+ )
+ .setUnitAmount(price)
+ .build()
+ )
+ .setQuantity(STANDARD_QUANTITY_OF_RENTAL_CART)
+ .build()
+ )
+ .build();
+
+ return Session.create(params);
+ }
+
+ private String createUrl(String type) {
+ return UriComponentsBuilder.newInstance()
+ .scheme("http")
+ .host(host)
+ .port(port)
+ .path(DEFAULT_URL_PART + "/" + type)
+ .query("sessionId={CHECKOUT_SESSION_ID}")
+ .build()
+ .toUriString();
+ }
+
+ private Long calculateTotalAmount(Rental rental, Payment.Type type) {
+ PaymentAmountHandler amountHandler = handler.getHandler(type);
+ int rentalDays = getNumberOfRentalDays(rental);
+ BigDecimal dailyFee = rental.getCar().getDailyFee();
+ return amountHandler.getPaymentAmount(dailyFee, rentalDays);
+ }
+
+ private int getNumberOfRentalDays(Rental rental) {
+ LocalDate actualReturnDate = rental.getActualReturnDate().toLocalDate();
+ LocalDate rentalDate = rental.getRentalDate().toLocalDate();
+ return Period.between(rentalDate, actualReturnDate).getDays();
+ }
+}
diff --git a/src/main/java/com/project/carsharingapp/service/rental/RentalService.java b/src/main/java/com/project/carsharingapp/service/rental/RentalService.java
index 6bce197..6ec1358 100644
--- a/src/main/java/com/project/carsharingapp/service/rental/RentalService.java
+++ b/src/main/java/com/project/carsharingapp/service/rental/RentalService.java
@@ -2,7 +2,6 @@
import com.project.carsharingapp.dto.rental.CreateRentalRequestDto;
import com.project.carsharingapp.dto.rental.RentalDto;
-import com.project.carsharingapp.dto.rental.SetActualReturnDateRequestDto;
import java.util.List;
public interface RentalService {
diff --git a/src/main/java/com/project/carsharingapp/service/rental/RentalServiceImpl.java b/src/main/java/com/project/carsharingapp/service/rental/RentalServiceImpl.java
index 3a77bf1..fbbb79a 100644
--- a/src/main/java/com/project/carsharingapp/service/rental/RentalServiceImpl.java
+++ b/src/main/java/com/project/carsharingapp/service/rental/RentalServiceImpl.java
@@ -8,8 +8,8 @@
import com.project.carsharingapp.model.Rental;
import com.project.carsharingapp.model.User;
import com.project.carsharingapp.repository.CarRepository;
-import com.project.carsharingapp.repository.rentals.RentalRepository;
import com.project.carsharingapp.repository.UserRepository;
+import com.project.carsharingapp.repository.rentals.RentalRepository;
import java.time.LocalDateTime;
import java.util.List;
import lombok.RequiredArgsConstructor;
@@ -27,16 +27,17 @@ public class RentalServiceImpl implements RentalService {
public RentalDto add(CreateRentalRequestDto requestDto) {
Rental rental = rentalMapper.toEntity(requestDto);
rental.setCar(getCar(requestDto.getCarId()));
- rental.setUser(getUser(requestDto.getCarId())); // Use auth obj here
+ rental.setUser(getUser(requestDto.getCarId()));
rental.setActive(true);
rental = rentalRepository.save(rental);
- decreaseCarInventory(requestDto.getCarId()); // add notification
+ decreaseCarInventory(requestDto.getCarId());
return rentalMapper.toDto(rental);
}
@Override
public List getByUserIdAndActiveStatus(Long userId, boolean isActive) {
- List rentals = rentalRepository.findRentalsByUserIdAndActiveStatus(userId, isActive);
+ List rentals = rentalRepository
+ .findRentalsByUserIdAndActiveStatus(userId, isActive);
if (rentals == null || rentals.isEmpty()) {
throw new EntityNotFoundException("No rentals found for user id: "
+ userId + " and active status: " + isActive);
@@ -46,19 +47,6 @@ public List getByUserIdAndActiveStatus(Long userId, boolean isActive)
.toList();
}
-// For User
-
-// private RentalDto getByUserIdAndActiveStatus(Auth userId, boolean isActive) { //
-// Rental rentals = rentalRepository.findRentalByUserIdAndActiveStatus(userId, isActive);
-// if (rentals == null || rentals.isEmpty()) {
-// throw new EntityNotFoundException("No rentals found for user id: "
-// + userId + " and active status: " + isActive);
-// }
-// return rentals.stream()
-// .map(rentalMapper::toDto)
-// .toList();
-// }
-
@Override
public RentalDto getById(Long id) {
Rental rental = rentalRepository.findById(id).orElseThrow(
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d76712d..06beab8 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,6 +1,6 @@
spring.datasource.url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC
spring.datasource.username=root
-spring.datasource.password=admin
+spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
server.servlet.context-path=/api
@@ -8,5 +8,7 @@ spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
spring.jpa.open-in-view=false
-bot.name=SharingCarBot
-bot.token=6631383610:AAExM59fyeZyshmxsmupqUrAV9TcitH30vk
+stripe.secret=sk_test_51NwluPLODs6ppc0Lt4vFUOmyqkOeMpnbizJwy\
+ BNFWQ0Y2rL79OtqPtydVF11PD2WoXiIkxCc3IrThcvWZkOmmn1e00ST12M2PI
+app.host=localhost
+app.port=8080
diff --git a/src/main/resources/db/changelog/changes/add-default-cars-to-cars-table.yaml b/src/main/resources/db/changelog/changes/add-default-cars-to-cars-table.yaml
deleted file mode 100644
index d1927d2..0000000
--- a/src/main/resources/db/changelog/changes/add-default-cars-to-cars-table.yaml
+++ /dev/null
@@ -1,115 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: insert-car-1
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: cars
- columns:
- - column:
- name: model
- value: "Toyota Corolla"
- - column:
- name: brand
- value: "Toyota"
- - column:
- name: inventory
- value: 10
- - column:
- name: car_type
- value: "SEDAN"
- - column:
- name: daily_fee
- value: 50.00
-
- - changeSet:
- id: insert-car-2
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: cars
- columns:
- - column:
- name: model
- value: "Honda Civic"
- - column:
- name: brand
- value: "Honda"
- - column:
- name: inventory
- value: 8
- - column:
- name: car_type
- value: "SEDAN"
- - column:
- name: daily_fee
- value: 45.00
-
- - changeSet:
- id: insert-car-3
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: cars
- columns:
- - column:
- name: model
- value: "Ford Mustang"
- - column:
- name: brand
- value: "Ford"
- - column:
- name: inventory
- value: 5
- - column:
- name: car_type
- value: "UNIVERSAL"
- - column:
- name: daily_fee
- value: 80.00
-
- - changeSet:
- id: insert-car-4
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: cars
- columns:
- - column:
- name: model
- value: "Volkswagen Golf"
- - column:
- name: brand
- value: "Volkswagen"
- - column:
- name: inventory
- value: 7
- - column:
- name: car_type
- value: "HATCHBACK"
- - column:
- name: daily_fee
- value: 55.00
-
- - changeSet:
- id: insert-car-5
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: cars
- columns:
- - column:
- name: model
- value: "Chevrolet Tahoe"
- - column:
- name: brand
- value: "Chevrolet"
- - column:
- name: inventory
- value: 4
- - column:
- name: car_type
- value: "SUV"
- - column:
- name: daily_fee
- value: 70.00
diff --git a/src/main/resources/db/changelog/changes/add-default-rentals-to-rentals-table.yaml b/src/main/resources/db/changelog/changes/add-default-rentals-to-rentals-table.yaml
deleted file mode 100644
index 492eec0..0000000
--- a/src/main/resources/db/changelog/changes/add-default-rentals-to-rentals-table.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: insert-rental-1
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: rentals
- columns:
- - column:
- name: rental_date
- value: "2023-10-15 09:00:00"
- - column:
- name: return_date
- value: "2023-10-18 15:00:00"
- - column:
- name: car_id
- value: 1
- - column:
- name: user_id
- value: 1
-
- - changeSet:
- id: insert-rental-2
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: rentals
- columns:
- - column:
- name: rental_date
- value: "2023-10-20 11:30:00"
- - column:
- name: return_date
- value: "2023-10-25 10:15:00"
- - column:
- name: car_id
- value: 2
- - column:
- name: user_id
- value: 2
-
- - changeSet:
- id: insert-rental-3
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: rentals
- columns:
- - column:
- name: rental_date
- value: "2023-10-12 14:45:00"
- - column:
- name: return_date
- value: "2023-10-16 16:30:00"
- - column:
- name: car_id
- value: 3
- - column:
- name: user_id
- value: 3
diff --git a/src/main/resources/db/changelog/changes/add-default-users-to-users-table.yaml b/src/main/resources/db/changelog/changes/add-default-users-to-users-table.yaml
deleted file mode 100644
index 75ceb75..0000000
--- a/src/main/resources/db/changelog/changes/add-default-users-to-users-table.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: insert-user-1
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: users
- columns:
- - column:
- name: email
- value: user1@example.com
- - column:
- name: first_name
- value: John
- - column:
- name: last_name
- value: Doe
- - column:
- name: password
- value: password1
- - column:
- name: telegram_chat_id
- value: 1234567
-
- - changeSet:
- id: insert-user-2
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: users
- columns:
- - column:
- name: email
- value: user2@example.com
- - column:
- name: first_name
- value: Jane
- - column:
- name: last_name
- value: Smith
- - column:
- name: password
- value: password2
- - column:
- name: telegram_chat_id
- value: 9876543
-
- - changeSet:
- id: insert-user-3
- author: Dmytro Varukha
- changes:
- - insert:
- tableName: users
- columns:
- - column:
- name: email
- value: user3@example.com
- - column:
- name: first_name
- value: Alice
- - column:
- name: last_name
- value: Johnson
- - column:
- name: password
- value: password3
- - column:
- name: telegram_chat_id
- value: 5555555
diff --git a/src/main/resources/db/changelog/changes/create-payments-table.yaml b/src/main/resources/db/changelog/changes/create-payments-table.yaml
index ecce451..84e3239 100644
--- a/src/main/resources/db/changelog/changes/create-payments-table.yaml
+++ b/src/main/resources/db/changelog/changes/create-payments-table.yaml
@@ -32,12 +32,12 @@ databaseChangeLog:
references: rentals(id)
- column:
name: session_url
- type: varchar(255)
+ type: varchar(510)
constraints:
nullable: false
- column:
name: session_id
- type: varchar(255)
+ type: varchar(510)
constraints:
nullable: false
- column:
diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml
index 16b3e5e..ef49be4 100644
--- a/src/main/resources/db/changelog/db.changelog-master.yaml
+++ b/src/main/resources/db/changelog/db.changelog-master.yaml
@@ -11,11 +11,5 @@ databaseChangeLog:
file: db/changelog/changes/create-rentals-table.yaml
- include:
file: db/changelog/changes/create-payments-table.yaml
- - include:
- file: db/changelog/changes/add-default-cars-to-cars-table.yaml
- - include:
- file: db/changelog/changes/add-default-users-to-users-table.yaml
- - include:
- file: db/changelog/changes/add-default-rentals-to-rentals-table.yaml
- include:
file: db/changelog/changes/add-is-active-column-to-rental-table.yaml
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
index bc97def..440751f 100644
--- a/src/test/resources/application.properties
+++ b/src/test/resources/application.properties
@@ -4,5 +4,10 @@ spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+stripe.secret=sk_test_51NwluPLODs6ppc0Lt4vFUOmyqkOeMpnbizJwy\
+ BNFWQ0Y2rL79OtqPtydVF11PD2WoXiIkxCc3IrThcvWZkOmmn1e00ST12M2PI
+app.host=localhost
+app.port=8080
+
bot.name=SharingCarBot
bot.token=6631383610:AAExM59fyeZyshmxsmupqUrAV9TcitH30vk