implementation(platform("software.amazon.awssdk:bom:2.21.15"))
implementation("software.amazon.awssdk:dynamodb")
implementation("software.amazon.awssdk:dynamodb-enhanced")


@DynamoDbBean
public class Product {
private String id;
private String productName;
private String code;
private float price;
private String model;
private String productUrl;
@DynamoDbPartitionKey
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getProductUrl() {
return productUrl;
}
public void setProductUrl(String productUrl) {
this.productUrl = productUrl;
}
}

@Configuration
public class DynamoDBConfig {
}

@Value("${aws.region}")
private String awsRegion;

aws.region=ap-southeast-1

@Bean
@Primary
public DynamoDbAsyncClient dynamoDbAsyncClient() {
return DynamoDbAsyncClient.builder()
.credentialsProvider(DefaultCredentialsProvider.create())
.region(Region.of(awsRegion))
.overrideConfiguration(ClientOverrideConfiguration.builder()
.addExecutionInterceptor(new TracingInterceptor())
.build())
.build();
}

@Bean
@Primary
public DynamoDbEnhancedAsyncClient dynamoDbEnhancedAsyncClient() {
return DynamoDbEnhancedAsyncClient.builder()
.dynamoDbClient(dynamoDbAsyncClient())
.build();
}
DynamoDbEnhancedAsyncClient cung cấp các API đơn giản hơn và dễ sử dụng hơn so với DynamoDbAsyncClient thông thường, tập trung vào việc làm việc với các bảng và mô hình dữ liệu trong DynamoDB theo cách trừu tượng hơn và chi tiết hơn. Sử dụng client nâng cao này giúp giảm bớt phần nào độ phức tạp khi tương tác với DynamoDB, đặc biệt là khi làm việc với các hoạt động CRUD (Tạo, Đọc, Cập nhật, Xóa) trên dữ liệu.
