CouponCodeGenerator.java

package com.deveagles.be15_deveagles_be.features.coupons.domain.service;

import java.security.SecureRandom;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.springframework.stereotype.Component;

@Component
public class CouponCodeGenerator {

  private static final String PREFIX = "CP";
  private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  private static final SecureRandom SECURE_RANDOM = new SecureRandom();

  public String generateCouponCode() {
    String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
    String randomCode = generateSecureRandomString(8);

    return PREFIX + dateStr + randomCode;
  }

  public String generateCouponCode(String customPrefix) {
    String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
    String randomCode = generateSecureRandomString(8);

    return customPrefix + dateStr + randomCode;
  }

  public String generateShortCouponCode() {
    String randomCode = generateSecureRandomString(10);
    return PREFIX + randomCode;
  }

  private String generateSecureRandomString(int length) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < length; i++) {
      result.append(CHARACTERS.charAt(SECURE_RANDOM.nextInt(CHARACTERS.length())));
    }
    return result.toString();
  }
}