diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/controller/CreditCardInfoController.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/controller/CreditCardInfoController.java index 0ab94cbb..48964581 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/controller/CreditCardInfoController.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/controller/CreditCardInfoController.java @@ -1,4 +1,84 @@ package pwr.jakprzyjade.inferius.creditcardinfo.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import pwr.jakprzyjade.inferius.creditcardinfo.database.CreateCreditCardDto; +import pwr.jakprzyjade.inferius.creditcardinfo.database.CreditCardDto; +import pwr.jakprzyjade.inferius.creditcardinfo.database.UpdateCreditCardDto; +import pwr.jakprzyjade.inferius.creditcardinfo.service.CreditCardInfoService; +import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; +import pwr.jakprzyjade.inferius.shared.UserRole; +import pwr.jakprzyjade.inferius.shared.UserRoles; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/ext/v1/cards") +@RequiredArgsConstructor +@Tag(name = "Credit Card", description = "Operations related to credit cards") public class CreditCardInfoController { + + private final CreditCardInfoService creditCardInfoService; + private final UUIDv7Validator uuiDv7Validator; + + @UserRoles(UserRole.PASSENGER) + @GetMapping + @Operation(summary = "Retrieve credit cards", description = "Pobranie listy kart płatniczych.") + public ResponseEntity> getCreditCards( + @RequestHeader("jp-user-id") UUID userId + ) { + List cards = creditCardInfoService.getCreditCards(userId); + return ResponseEntity.ok(cards); + } + + @UserRoles(UserRole.PASSENGER) + @PutMapping("/{id}") + @Operation(summary = "Update credit card", description = "Zaktualizowanie danych karty płatniczej.") + public ResponseEntity updateCreditCard( + @RequestHeader("jp-user-id") UUID userId, + @PathVariable("id") String id, + @Valid @RequestBody UpdateCreditCardDto updateDto + ) { + if (!uuiDv7Validator.isStringValidUUID(id)) { + throw new IllegalArgumentException("Invalid cardId format. It must be a valid UUIDv7."); + } + + UUID cardId = UUID.fromString(id); + + CreditCardDto updatedCard = creditCardInfoService.updateCreditCard(cardId, updateDto, userId); + return ResponseEntity.ok(updatedCard); + } + + @UserRoles(UserRole.PASSENGER) + @DeleteMapping("/{id}") + @Operation(summary = "Delete credit card", description = "Usunięcie karty płatniczej.") + public ResponseEntity deleteCreditCard( + @RequestHeader("jp-user-id") UUID userId, + @PathVariable("id") String id + ) { + if (!uuiDv7Validator.isStringValidUUID(id)) { + throw new IllegalArgumentException("Invalid cardId format. It must be a valid UUIDv7."); + } + + UUID cardId = UUID.fromString(id); + creditCardInfoService.deleteCreditCard(cardId, userId); + return ResponseEntity.noContent().build(); + } + + @UserRoles(UserRole.PASSENGER) + @PostMapping + @Operation(summary = "Add a new credit card", description = "Dodanie nowej karty płatniczej.") + public ResponseEntity addCreditCard( + @RequestHeader("jp-user-id") UUID userId, + @Valid @RequestBody CreateCreditCardDto createDto + ) { + CreditCardDto newCard = creditCardInfoService.addCreditCard(userId, createDto); + return ResponseEntity.status(HttpStatus.CREATED).body(newCard); + } } diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreateCreditCardDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreateCreditCardDto.java new file mode 100644 index 00000000..7f7b614d --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreateCreditCardDto.java @@ -0,0 +1,30 @@ +package pwr.jakprzyjade.inferius.creditcardinfo.database; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CreateCreditCardDto { + @Size(max = 255) + private String label; + + @NotNull + @Pattern(regexp = "[\\s]*[0-9]*[1-9]+") + @Size(min = 16, max = 16) + private String number; + + @NotNull + @Size(min = 1, max = 255) + private String holderName; + + @NotNull + private String expirationDate; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardDto.java new file mode 100644 index 00000000..62e0017b --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardDto.java @@ -0,0 +1,20 @@ +package pwr.jakprzyjade.inferius.creditcardinfo.database; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; + +import java.util.UUID; + +@Data +@AllArgsConstructor +@Getter +@Builder +public class CreditCardDto { + private UUID id; + private String label; + private String number; + private String holderName; + private String expirationDate; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfo.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfo.java index 84f1677b..a5f34c47 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfo.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfo.java @@ -1,5 +1,6 @@ package pwr.jakprzyjade.inferius.creditcardinfo.database; +import org.hibernate.annotations.GenericGenerator; import pwr.jakprzyjade.inferius.shared.UUIDv7; import pwr.jakprzyjade.inferius.wallet.database.Wallet; import jakarta.persistence.*; @@ -19,6 +20,8 @@ @Entity public class CreditCardInfo { @Id + @GeneratedValue(generator = "uuidv7-gen") + @GenericGenerator(name = "uuidv7-gen", strategy = "src/main/java/pwr/jakprzyjade/inferius/shared/UUIDv7Generator.java") @UUIDv7 private UUID id; diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfoRepository.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfoRepository.java new file mode 100644 index 00000000..ab909981 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/CreditCardInfoRepository.java @@ -0,0 +1,14 @@ +package pwr.jakprzyjade.inferius.creditcardinfo.database; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface CreditCardInfoRepository extends JpaRepository { + List findByWalletPassengerId(UUID passengerId); + Optional findByIdAndWalletPassengerId(UUID id, UUID passengerId); +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/UpdateCreditCardDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/UpdateCreditCardDto.java new file mode 100644 index 00000000..ec1c824e --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/database/UpdateCreditCardDto.java @@ -0,0 +1,20 @@ +package pwr.jakprzyjade.inferius.creditcardinfo.database; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UpdateCreditCardDto { + @Size(max = 255) + private String label; + + @NotNull + private String expirationDate; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/service/CreditCardInfoService.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/service/CreditCardInfoService.java index 8a117e26..aee9d3ff 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/service/CreditCardInfoService.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/creditcardinfo/service/CreditCardInfoService.java @@ -1,4 +1,94 @@ package pwr.jakprzyjade.inferius.creditcardinfo.service; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import pwr.jakprzyjade.inferius.creditcardinfo.database.*; +import pwr.jakprzyjade.inferius.fine.database.Fine; +import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; +import pwr.jakprzyjade.inferius.shared.exceptions.ResourceNotFoundException; +import pwr.jakprzyjade.inferius.wallet.database.Wallet; +import pwr.jakprzyjade.inferius.wallet.database.WalletHistoryRepository; +import pwr.jakprzyjade.inferius.wallet.database.WalletRepository; + +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor public class CreditCardInfoService { + + private final CreditCardInfoRepository creditCardInfoRepository; + private final WalletRepository walletRepository; + + public List getCreditCards(UUID userId) { + List creditCards = creditCardInfoRepository.findByWalletPassengerId(userId); + + if (creditCards.isEmpty()) { + throw new ResourceNotFoundException("No credit cards found for user ID: " + userId); + } + + return creditCards.stream() + .map(card -> CreditCardDto.builder() + .id(card.getId()) + .label(card.getLabel()) + .number(card.getNumber()) + .holderName(card.getHolderName()) + .expirationDate(card.getExpirationDate()) + .build()) + .toList(); + } + + public CreditCardDto updateCreditCard(UUID cardId, UpdateCreditCardDto updateDto, UUID userId) { + CreditCardInfo card = creditCardInfoRepository.findByIdAndWalletPassengerId(cardId, userId) + .orElseThrow(() -> new ResourceNotFoundException("Credit card not found or you are not authorized.")); + + CreditCardInfo updatedCard = CreditCardInfo.builder() + .id(card.getId()) + .wallet(card.getWallet()) + .number(card.getNumber()) + .holderName(card.getHolderName()) + .label(updateDto.getLabel() != null ? updateDto.getLabel() : card.getLabel()) + .expirationDate(updateDto.getExpirationDate() != null ? updateDto.getExpirationDate() : card.getExpirationDate()) + .build(); + + CreditCardInfo savedCard = creditCardInfoRepository.save(updatedCard); + + return CreditCardDto.builder() + .id(savedCard.getId()) + .label(savedCard.getLabel()) + .number(savedCard.getNumber()) + .holderName(savedCard.getHolderName()) + .expirationDate(savedCard.getExpirationDate()) + .build(); + } + + public void deleteCreditCard(UUID cardId, UUID userId) { + CreditCardInfo card = creditCardInfoRepository.findByIdAndWalletPassengerId(cardId, userId) + .orElseThrow(() -> new ResourceNotFoundException("Credit card not found or you are not authorized.")); + + creditCardInfoRepository.delete(card); + } + + public CreditCardDto addCreditCard(UUID userId, CreateCreditCardDto createDto) { + Wallet wallet = walletRepository.findByPassengerId(userId) + .orElseThrow(() -> new ResourceNotFoundException("Wallet not found for user ID: " + userId)); + + CreditCardInfo newCard = CreditCardInfo.builder() + .label(createDto.getLabel()) + .number(createDto.getNumber()) + .holderName(createDto.getHolderName()) + .expirationDate(createDto.getExpirationDate()) + .wallet(wallet) + .build(); + + CreditCardInfo savedCard = creditCardInfoRepository.save(newCard); + + return CreditCardDto.builder() + .id(savedCard.getId()) + .label(savedCard.getLabel()) + .number(savedCard.getNumber()) + .holderName(savedCard.getHolderName()) + .expirationDate(savedCard.getExpirationDate()) + .build(); + } } diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/controller/FineController.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/controller/FineController.java index 39bf2496..3ae8e466 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/controller/FineController.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/controller/FineController.java @@ -1,4 +1,79 @@ package pwr.jakprzyjade.inferius.fine.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import pwr.jakprzyjade.inferius.fine.database.FineCreateDto; +import pwr.jakprzyjade.inferius.fine.database.FineDto; +import pwr.jakprzyjade.inferius.fine.service.FineService; +import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; +import pwr.jakprzyjade.inferius.shared.UserRole; +import pwr.jakprzyjade.inferius.shared.UserRoles; + +import java.util.UUID; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/ext/v1/fines") +@Tag(name = "Fines", description = "Operations related to fines") public class FineController { + + private final FineService fineService; + private final UUIDv7Validator uuiDv7Validator; + + @UserRoles({UserRole.PASSENGER, UserRole.INSPECTOR}) + @GetMapping + @Operation(summary = "Retrieve list of fines", description = "Pobranie listy mandatów.") + public ResponseEntity> getFines( + @RequestHeader("jp-user-id") UUID userId, + Pageable pageable + ) { + Page fines = fineService.getFines(userId, pageable); + return ResponseEntity.ok(fines); + } + + @UserRoles(UserRole.PASSENGER) + @GetMapping("/{id}") + @Operation(summary = "Retrieve fine details", description = "Pobranie informacji o mandacie.") + public ResponseEntity getFineDetails( + @RequestHeader("jp-user-id") UUID userId, + @PathVariable("id") UUID fineId + ) { + FineDto fine = fineService.getFineDetails(userId, fineId); + return ResponseEntity.ok(fine); + } + + @UserRoles(UserRole.INSPECTOR) + @PutMapping("/{id}/cancel") + @Operation(summary = "Cancel a fine", description = "Anulowanie mandatu.") + public ResponseEntity cancelFine( + @RequestHeader("jp-user-id") UUID inspectorId, + @PathVariable("id") String id + ) { + if (!uuiDv7Validator.isStringValidUUID(id)) { + throw new IllegalArgumentException("Invalid fineId format. It must be a valid UUIDv7."); + } + + UUID fineId = UUID.fromString(id); + + FineDto cancelledFine = fineService.cancelFine(inspectorId, fineId); + return ResponseEntity.ok(cancelledFine); + } + + @UserRoles(UserRole.INSPECTOR) + @PostMapping + @Operation(summary = "Issue a fine", description = "Wystawienie mandatu.") + public ResponseEntity createFine( + @RequestHeader("jp-user-id") UUID inspectorId, + @Valid @RequestBody FineCreateDto fineCreateDto + ) { + FineDto createdFine = fineService.createFine(fineCreateDto, inspectorId); + return ResponseEntity.status(HttpStatus.CREATED).body(createdFine); + } } diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/Fine.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/Fine.java index a46f8c5b..6038ce39 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/Fine.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/Fine.java @@ -1,6 +1,7 @@ package pwr.jakprzyjade.inferius.fine.database; import jakarta.validation.constraints.Min; +import org.hibernate.annotations.GenericGenerator; import pwr.jakprzyjade.inferius.shared.UUIDv7; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; @@ -22,6 +23,8 @@ public class Fine { @Id + @GeneratedValue(generator = "uuidv7-gen") + @GenericGenerator(name = "uuidv7-gen", strategy = "src/main/java/pwr/jakprzyjade/inferius/shared/UUIDv7Generator.java") @UUIDv7 private UUID id; @@ -44,6 +47,7 @@ public class Fine { @Column(nullable = false, updatable = false) @NotNull + @Builder.Default private Instant time = Instant.now(); @Enumerated(EnumType.STRING) @@ -54,5 +58,6 @@ public class Fine { @Enumerated(EnumType.STRING) @Column(nullable = false, length = 32) @NotNull + @Builder.Default private FineStatus status = FineStatus.UNPAID; } diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineCreateDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineCreateDto.java new file mode 100644 index 00000000..62619c36 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineCreateDto.java @@ -0,0 +1,34 @@ +package pwr.jakprzyjade.inferius.fine.database; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import jakarta.validation.constraints.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import pwr.jakprzyjade.inferius.shared.UUIDv7Deserializer; + +import java.math.BigDecimal; +import java.util.UUID; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FineCreateDto { + + @JsonDeserialize(using = UUIDv7Deserializer.class) + private UUID passengerId; + + @NotNull + @Size(min = 1, max = 255) + private String recipient; + + @NotNull + @Min(0) + @Digits(integer = 8, fraction = 0) + private Integer amountGrosze; + + @NotNull + private FineReason reason; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineDto.java new file mode 100644 index 00000000..4beadba8 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineDto.java @@ -0,0 +1,19 @@ +package pwr.jakprzyjade.inferius.fine.database; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +@Data +@Builder +public class FineDto { + private UUID id; + private BigDecimal amountPln; + private Instant time; + private String recipient; + private FineReason reason; + private FineStatus status; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineRepository.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineRepository.java new file mode 100644 index 00000000..1bf2d3f4 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/database/FineRepository.java @@ -0,0 +1,13 @@ +package pwr.jakprzyjade.inferius.fine.database; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface FineRepository extends JpaRepository { + Page findByPassengerIdOrInspectorId(UUID passengerId, UUID inspectorId, Pageable pageable); +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/service/FineService.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/service/FineService.java index 49968157..7049c08b 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/service/FineService.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/fine/service/FineService.java @@ -1,4 +1,112 @@ package pwr.jakprzyjade.inferius.fine.service; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.EnumUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import pwr.jakprzyjade.inferius.fine.database.*; +import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; +import pwr.jakprzyjade.inferius.shared.exceptions.ResourceNotFoundException; +import pwr.jakprzyjade.inferius.shared.exceptions.UserUnauthorizedException; + +import java.io.Console; +import java.math.BigDecimal; +import java.time.Instant; +import java.util.Arrays; +import java.util.UUID; + +@Service +@RequiredArgsConstructor public class FineService { + + private final FineRepository fineRepository; + private final UUIDv7Validator uuiDv7Validator; + + public Page getFines(UUID userId, Pageable pageable) { + Page fines = fineRepository.findByPassengerIdOrInspectorId(userId, userId, pageable); + if (fines.isEmpty()) { + throw new ResourceNotFoundException("No fines found for user ID: " + userId); + } + return fines.map(fine -> FineDto.builder() + .id(fine.getId()) + .amountPln(fine.getAmountPln()) + .time(fine.getTime()) + .recipient(fine.getRecipient()) + .reason(fine.getReason()) + .status(fine.getStatus()) + .build()); + } + + public FineDto getFineDetails(UUID userId, UUID fineId) { + Fine fine = fineRepository.findById(fineId) + .orElseThrow(() -> new ResourceNotFoundException("Fine not found for ID: " + fineId)); + + if (!fine.getPassengerId().equals(userId)) { + throw new UserUnauthorizedException("You are not authorized to view this fine."); + } + + return FineDto.builder() + .id(fine.getId()) + .amountPln(fine.getAmountPln()) + .time(fine.getTime()) + .recipient(fine.getRecipient()) + .reason(fine.getReason()) + .status(fine.getStatus()) + .build(); + } + + public FineDto cancelFine(UUID inspectorId, UUID fineId) { + Fine fine = fineRepository.findById(fineId) + .orElseThrow(() -> new ResourceNotFoundException("Fine not found for ID: " + fineId)); + + if (fine.getStatus() == FineStatus.CANCELLED) { + throw new IllegalStateException("The fine is already cancelled."); + } + + if (!fine.getInspectorId().equals(inspectorId)) { + throw new UserUnauthorizedException("You are not authorized to cancel this fine."); + } + + fine.setStatus(FineStatus.CANCELLED); + Fine updatedFine = fineRepository.save(fine); + + return FineDto.builder() + .id(updatedFine.getId()) + .amountPln(updatedFine.getAmountPln()) + .time(updatedFine.getTime()) + .recipient(updatedFine.getRecipient()) + .reason(updatedFine.getReason()) + .status(updatedFine.getStatus()) + .build(); + } + + public FineDto createFine(FineCreateDto fineCreateDto, UUID inspectorId) { + if (fineCreateDto.getPassengerId() == null && fineCreateDto.getRecipient() == null) { + throw new IllegalArgumentException("Either passengerId or recipient must be provided."); + } + + BigDecimal amountPln = BigDecimal.valueOf(fineCreateDto.getAmountGrosze()).divide(BigDecimal.valueOf(100)); + + Fine fine = Fine.builder() + .passengerId(fineCreateDto.getPassengerId()) + .inspectorId(inspectorId) + .recipient(fineCreateDto.getRecipient()) + .amountPln(amountPln) + .reason(fineCreateDto.getReason()) + .build(); + + Fine savedFine = fineRepository.save(fine); + + return FineDto.builder() + .id(savedFine.getId()) + .amountPln(savedFine.getAmountPln()) + .time(savedFine.getTime()) + .recipient(savedFine.getRecipient()) + .reason(savedFine.getReason()) + .status(savedFine.getStatus()) + .build(); + } } diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UUIDv7Deserializer.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UUIDv7Deserializer.java new file mode 100644 index 00000000..b81867d4 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UUIDv7Deserializer.java @@ -0,0 +1,31 @@ +package pwr.jakprzyjade.inferius.shared; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.UUID; + +@Component +public class UUIDv7Deserializer extends JsonDeserializer { + + private final UUIDv7Validator uuidv7Validator; + + @Autowired + public UUIDv7Deserializer(UUIDv7Validator uuidv7Validator) { + this.uuidv7Validator = uuidv7Validator; + } + + @Override + public UUID deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String value = p.getText(); + if (!uuidv7Validator.isStringValidUUID(value)) { + throw new InvalidFormatException(p, "Invalid UUIDv7 format.", value, UUID.class); + } + return UUID.fromString(value); + } +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRole.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRole.java similarity index 62% rename from implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRole.java rename to implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRole.java index ddc35006..18f8d1dc 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRole.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRole.java @@ -1,4 +1,4 @@ -package pwr.jakprzyjade.inferius.shared.exceptions; +package pwr.jakprzyjade.inferius.shared; public enum UserRole { GUEST, diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRoles.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRoles.java similarity index 85% rename from implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRoles.java rename to implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRoles.java index 82a3529e..64f4faa0 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserRoles.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/UserRoles.java @@ -1,4 +1,4 @@ -package pwr.jakprzyjade.inferius.shared.exceptions; +package pwr.jakprzyjade.inferius.shared; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/GlobalExceptionHandler.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/GlobalExceptionHandler.java index edb0da6b..95645489 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/GlobalExceptionHandler.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/GlobalExceptionHandler.java @@ -1,6 +1,8 @@ package pwr.jakprzyjade.inferius.shared.exceptions; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -8,6 +10,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.UUID; @RestControllerAdvice public class GlobalExceptionHandler { @@ -57,6 +60,50 @@ public ResponseEntity handleNoHandlerFoundException(NoHandlerFoundExce ); } + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity handleResourceNotFound(ResourceNotFoundException ex) { + return buildErrorResponse(404, "resource-not-found", ex.getMessage(), "Żądany zasób nie został znaleziony."); + } + + @ExceptionHandler(IllegalStateException.class) + public ResponseEntity handleIllegalStateException(IllegalStateException ex) { + return buildErrorResponse(400, "illegal-state", ex.getMessage(), "Operacja jest niedozwolona."); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex) { + Throwable rootCause = ex.getRootCause(); + + if (rootCause instanceof InvalidFormatException) { + InvalidFormatException formatException = (InvalidFormatException) rootCause; + if (formatException.getTargetType() == UUID.class) { + return buildErrorResponse( + 400, + "invalid-uuidv7", + "Invalid UUIDv7 format.", + "Nieprawidłowy format UUIDv7." + ); + } + } + + return buildErrorResponse( + 400, + "invalid-input", + "Invalid input data.", + "Nieprawidłowe dane wejściowe." + ); + } + + @ExceptionHandler(IllegalArgumentException.class) + public ResponseEntity handleIllegalArgumentException(IllegalArgumentException ex) { + return buildErrorResponse( + 400, + "invalid-argument", + ex.getMessage(), + "Nieprawidłowe dane wejściowe." + ); + } + private ResponseEntity buildErrorResponse(int code, String kind, String messageEn, String messagePl) { return ResponseEntity.status(code) .body(new AppError(code, kind, messageEn, messagePl)); diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/InfoHeaderInterceptor.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/InfoHeaderInterceptor.java index 7dc73845..b4f35921 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/InfoHeaderInterceptor.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/InfoHeaderInterceptor.java @@ -14,7 +14,7 @@ public class InfoHeaderInterceptor implements HandlerInterceptor { private final UUIDv7Validator uuidv7Validator; - @Value("${INFERIUS_VERSION}") + @Value("${inferius.version}") private String appVersion; @Override diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/ResourceNotFoundException.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/ResourceNotFoundException.java new file mode 100644 index 00000000..f3544cb6 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/ResourceNotFoundException.java @@ -0,0 +1,7 @@ +package pwr.jakprzyjade.inferius.shared.exceptions; + +public class ResourceNotFoundException extends RuntimeException { + public ResourceNotFoundException(String message) { + super(message); + } +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserHeaderInterceptor.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserHeaderInterceptor.java index aa8cec9e..44a0122b 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserHeaderInterceptor.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/shared/exceptions/UserHeaderInterceptor.java @@ -7,6 +7,8 @@ import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; +import pwr.jakprzyjade.inferius.shared.UserRole; +import pwr.jakprzyjade.inferius.shared.UserRoles; import java.util.EnumSet; import java.util.List; diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/controller/WalletController.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/controller/WalletController.java index e26287c5..d240ac0c 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/controller/WalletController.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/controller/WalletController.java @@ -1,31 +1,46 @@ package pwr.jakprzyjade.inferius.wallet.controller; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import pwr.jakprzyjade.inferius.shared.exceptions.UserRole; -import pwr.jakprzyjade.inferius.shared.exceptions.UserRoles; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import pwr.jakprzyjade.inferius.wallet.database.Wallet; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import pwr.jakprzyjade.inferius.shared.UserRole; +import pwr.jakprzyjade.inferius.shared.UserRoles; +import pwr.jakprzyjade.inferius.wallet.database.WalletDto; +import pwr.jakprzyjade.inferius.wallet.database.WalletHistoryDto; +import pwr.jakprzyjade.inferius.wallet.service.WalletService; + +import java.util.UUID; -@Validated @RestController -@RequestMapping("/ext/v1/wallets") -@Tag(name = "Wallets", description = "Operacje na portfelach użytkowników") +@RequiredArgsConstructor +@RequestMapping("/ext/v1/wallet") +@Tag(name = "Wallet", description = "Operations related to wallet") public class WalletController { + private final WalletService walletService; + @UserRoles(UserRole.PASSENGER) - @GetMapping("/wallet") - @Operation(summary = "Pobierz listę portfeli", description = "Zwraca listę wszystkich portfeli") - public String getAllWallets() { - return "Lista portfeli"; + @GetMapping + @Operation(summary = "Retrieve balance for wallet", description = "Pobranie stanu portfela.") + public ResponseEntity getWallet(@RequestHeader("jp-user-id") UUID passengerId) { + WalletDto walletDto = walletService.getWallet(passengerId); + return ResponseEntity.ok(walletDto); } - @PostMapping - public ResponseEntity testValidation(@RequestBody @Valid Wallet wallet) { - return ResponseEntity.ok("Validation passed"); + @UserRoles(UserRole.PASSENGER) + @GetMapping("/history") + @Operation(summary = "Retrieve wallet transaction history", description = "Pobranie historii doładowań portfela.") + public ResponseEntity> getWalletHistory( + @RequestHeader("jp-user-id") UUID passengerId, + Pageable pageable) { + Page history = walletService.getWalletHistory(passengerId, pageable); + return ResponseEntity.ok(history); } } - diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletDto.java new file mode 100644 index 00000000..957df093 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletDto.java @@ -0,0 +1,14 @@ +package pwr.jakprzyjade.inferius.wallet.database; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.UUID; + +@Data +@Builder +public class WalletDto { + private UUID id; + private BigDecimal balance; +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryDto.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryDto.java new file mode 100644 index 00000000..c2cdbb6d --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryDto.java @@ -0,0 +1,16 @@ +package pwr.jakprzyjade.inferius.wallet.database; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +@Data +@Builder +public class WalletHistoryDto { + private UUID id; + private BigDecimal amount; + private Instant time; +} \ No newline at end of file diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryRepository.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryRepository.java new file mode 100644 index 00000000..22edbd41 --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletHistoryRepository.java @@ -0,0 +1,14 @@ +package pwr.jakprzyjade.inferius.wallet.database; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.UUID; + +@Repository +public interface WalletHistoryRepository extends JpaRepository { + Page findByWalletId(UUID walletId, Pageable pageable); +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletRepository.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletRepository.java new file mode 100644 index 00000000..d80b545b --- /dev/null +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/database/WalletRepository.java @@ -0,0 +1,12 @@ +package pwr.jakprzyjade.inferius.wallet.database; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface WalletRepository extends JpaRepository { + Optional findByPassengerId(UUID passengerId); +} diff --git a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/service/WalletService.java b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/service/WalletService.java index 8135ccde..e5c24f84 100644 --- a/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/service/WalletService.java +++ b/implementation/inferius/src/main/java/pwr/jakprzyjade/inferius/wallet/service/WalletService.java @@ -1,4 +1,42 @@ package pwr.jakprzyjade.inferius.wallet.service; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import pwr.jakprzyjade.inferius.shared.exceptions.ResourceNotFoundException; +import pwr.jakprzyjade.inferius.wallet.database.*; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor public class WalletService { + + private final WalletRepository walletRepository; + private final WalletHistoryRepository walletHistoryRepository; + + public WalletDto getWallet(UUID passengerId) { + Wallet wallet = walletRepository.findByPassengerId(passengerId) + .orElseThrow(() -> new ResourceNotFoundException("Wallet not found for passenger ID: " + passengerId)); + + return WalletDto.builder() + .id(wallet.getId()) + .balance(wallet.getBalancePln()) + .build(); + } + + public Page getWalletHistory(UUID passengerId, Pageable pageable) { + Wallet wallet = walletRepository.findByPassengerId(passengerId) + .orElseThrow(() -> new ResourceNotFoundException("Wallet not found for passenger ID: " + passengerId)); + + return walletHistoryRepository.findByWalletId(wallet.getId(), pageable) + .map(history -> WalletHistoryDto.builder() + .id(history.getId()) + .amount(history.getAmountPln()) + .time(history.getTime()) + .build()); + } } diff --git a/implementation/inferius/src/main/resources/application.properties b/implementation/inferius/src/main/resources/application.properties index 84db705f..7797e07d 100644 --- a/implementation/inferius/src/main/resources/application.properties +++ b/implementation/inferius/src/main/resources/application.properties @@ -1 +1,2 @@ spring.application.name=inferius +inferius.version=1.0.0 diff --git a/implementation/inferius/src/main/resources/application.yml b/implementation/inferius/src/main/resources/application.yml index ec211deb..47fe81ed 100644 --- a/implementation/inferius/src/main/resources/application.yml +++ b/implementation/inferius/src/main/resources/application.yml @@ -14,6 +14,7 @@ spring: hibernate: ddl-auto: update show-sql: false + open-in-view: false properties: hibernate: format_sql: true @@ -48,3 +49,10 @@ springdoc: path: /int/v1/docs/openapi swagger-ui: path: /int/v1/docs/swagger + +logging: + level: + org.hibernate.SQL: DEBUG + org.hibernate.type.descriptor.sql.BasicBinder: TRACE + org.hibernate.transaction: DEBUG + org.springframework.orm.jpa: DEBUG \ No newline at end of file diff --git a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/CreditCardInfoControllerTest.java b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/CreditCardInfoControllerTest.java new file mode 100644 index 00000000..e69de29b diff --git a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/InfoHeaderInterceptorTest.java b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/InfoHeaderInterceptorTest.java similarity index 98% rename from implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/InfoHeaderInterceptorTest.java rename to implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/InfoHeaderInterceptorTest.java index b71adae1..a92edfef 100644 --- a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/InfoHeaderInterceptorTest.java +++ b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/InfoHeaderInterceptorTest.java @@ -1,4 +1,4 @@ -package pwr.jakprzyjade.inferius; +package pwr.jakprzyjade.inferius.exceptions; import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; import pwr.jakprzyjade.inferius.shared.exceptions.InfoHeaderInterceptor; diff --git a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UnauthorizedExceptionTest.java b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UnauthorizedExceptionTest.java similarity index 96% rename from implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UnauthorizedExceptionTest.java rename to implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UnauthorizedExceptionTest.java index 5ef15895..c390c151 100644 --- a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UnauthorizedExceptionTest.java +++ b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UnauthorizedExceptionTest.java @@ -1,4 +1,4 @@ -package pwr.jakprzyjade.inferius; +package pwr.jakprzyjade.inferius.exceptions; import pwr.jakprzyjade.inferius.shared.exceptions.AppError; import pwr.jakprzyjade.inferius.shared.exceptions.GlobalExceptionHandler; diff --git a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UserHeaderInterceptorTest.java b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UserHeaderInterceptorTest.java similarity index 97% rename from implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UserHeaderInterceptorTest.java rename to implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UserHeaderInterceptorTest.java index b7174da7..e6b465b0 100644 --- a/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/UserHeaderInterceptorTest.java +++ b/implementation/inferius/src/test/java/pwr/jakprzyjade/inferius/exceptions/UserHeaderInterceptorTest.java @@ -1,4 +1,4 @@ -package pwr.jakprzyjade.inferius; +package pwr.jakprzyjade.inferius.exceptions; import pwr.jakprzyjade.inferius.shared.UUIDv7Validator; import jakarta.servlet.http.HttpServletRequest; @@ -9,6 +9,8 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.web.method.HandlerMethod; +import pwr.jakprzyjade.inferius.shared.UserRole; +import pwr.jakprzyjade.inferius.shared.UserRoles; import pwr.jakprzyjade.inferius.shared.exceptions.*; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/implementation/phoenix/compose.yml b/implementation/phoenix/compose.yml index c72b62d4..4e3265a4 100644 --- a/implementation/phoenix/compose.yml +++ b/implementation/phoenix/compose.yml @@ -16,5 +16,4 @@ services: - INFERIUS_SERVICE_HOST=host.docker.internal - INFERIUS_SERVICE_PORT=1082 - LEPRECHAUN_SERVICE_HOST=host.docker.internal - - LEPRECHAUN_SERVICE_PORT=1083 - - PHOENIX_VERSION=1.0.0 + - LEPRECHAUN_SERVICE_PORT=1083 \ No newline at end of file diff --git a/implementation/phoenix/src/main/resources/application.properties b/implementation/phoenix/src/main/resources/application.properties index b9515049..1d4be38e 100644 --- a/implementation/phoenix/src/main/resources/application.properties +++ b/implementation/phoenix/src/main/resources/application.properties @@ -1 +1,2 @@ spring.application.name=phoenix +phoenix.version=1.0.0 diff --git a/implementation/phoenix/src/main/resources/application.yml b/implementation/phoenix/src/main/resources/application.yml index 1b9b6c41..e7bd24e3 100644 --- a/implementation/phoenix/src/main/resources/application.yml +++ b/implementation/phoenix/src/main/resources/application.yml @@ -7,7 +7,7 @@ logging: spring: config: - import: classpath:env.properties + import: optional:classpath:env.properties cloud: gateway: routes: @@ -18,7 +18,7 @@ spring: filters: - RewritePath=/api/account/(?.*), /ext/${remaining} - AddRequestIdFilter - - AddRequestHeader=user-agent, Phoenix/${PHOENIX_VERSION} + - AddRequestHeader=user-agent, Phoenix/${phoenix.version} - id: tickets_route uri: http://${CLABBERT_SERVICE_HOST}:${CLABBERT_SERVICE_PORT} @@ -27,7 +27,7 @@ spring: filters: - RewritePath=/api/ticket/(?.*), /ext/${remaining} - AddRequestIdFilter - - AddRequestHeader=user-agent, Phoenix/${PHOENIX_VERSION} + - AddRequestHeader=user-agent, Phoenix/${phoenix.version} - id: payments_route uri: http://${INFERIUS_SERVICE_HOST}:${INFERIUS_SERVICE_PORT} @@ -36,7 +36,7 @@ spring: filters: - RewritePath=/api/payment/(?.*), /ext/${remaining} - AddRequestIdFilter - - AddRequestHeader=user-agent, Phoenix/${PHOENIX_VERSION} + - AddRequestHeader=user-agent, Phoenix/${phoenix.version} - id: logistics_route uri: http://${LEPRECHAUN_SERVICE_HOST}:${LEPRECHAUN_SERVICE_PORT} @@ -45,4 +45,4 @@ spring: filters: - RewritePath=/api/logistics/(?.*), /ext/${remaining} - AddRequestIdFilter - - AddRequestHeader=user-agent, Phoenix/${PHOENIX_VERSION} \ No newline at end of file + - AddRequestHeader=user-agent, Phoenix/${phoenix.version} \ No newline at end of file