PaymentConfiguration.java

package org.petify.funding.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;

@Configuration
@EnableScheduling
public class PaymentConfiguration {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    @ConfigurationProperties(prefix = "payment")
    public PaymentProperties paymentProperties() {
        return new PaymentProperties();
    }

    @Data
    public static class PaymentProperties {
        private Stripe stripe = new Stripe();
        private PayU payu = new PayU();
        private Analytics analytics = new Analytics();

        @Data
        public static class Stripe {
            private String apiKey;
            private String publishableKey;
            private String webhookSecret;
            private boolean enabled = true;
            private String apiVersion = "2023-10-16";
        }

        @Data
        public static class PayU {
            private String clientId;
            private String clientSecret;
            private String posId;
            private String md5Key;
            private String apiUrl = "https://secure.snd.payu.com";
            private boolean enabled = true;
            private boolean sandboxMode = true;
        }

        @Data
        public static class Analytics {
            private boolean enabled = true;
            private int retentionDays = 365;
            private String aggregationSchedule = "0 0 1 * * ?";
        }
    }
}