litmus core/db/mock packages

Signed-off-by: chandresh pancholi <chandresh.pancholi@navi.com>
This commit is contained in:
chandresh pancholi
2021-10-05 00:43:11 +05:30
parent 7515642f37
commit e8e82cdf74
40 changed files with 842 additions and 48 deletions

16
.gitignore vendored
View File

@@ -8,4 +8,18 @@ litmus-model/litmus-model.iml
litmus-model/target
litmus-client/litmus-client.iml
litmus-client/target
litmus-client/target
litmus-db/litmus-db.iml
litmus-db/target
litmus-mock/litmus-mock.iml
litmus-mock/target
litmus-liquibase/litmus-liquibase.iml
litmus-liquibase/target
litmus-cache/litmus-cache.iml
litmus-cache/target
target

23
litmus-cache/pom.xml Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>litmus</artifactId>
<groupId>com.navi.medici</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>litmus-cache</artifactId>
<version>1.0-SNAPSHOT</version>
<name>litmus-cache</name>
<dependencies>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.3</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,32 @@
package com.navi.medici.cache;
import com.navi.medici.command.CacheCommands;
import com.navi.medici.config.RedisConfiguration;
import lombok.RequiredArgsConstructor;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class RedisCache implements CacheCommands {
private final RedissonClient redissonClient;
private final RedisConfiguration redisConfiguration;
@Override
public Boolean reserveBF(String name) {
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter(name);
return bloomFilter.tryInit(redisConfiguration.getExpectedInsertions(), redisConfiguration.getFalseProbability());
}
@Override
public Boolean add(RBloomFilter<String> bf, String key) {
return bf.add(key);
}
@Override
public Boolean contains(RBloomFilter<String> bf, String key) {
return bf.contains(key);
}
}

View File

@@ -0,0 +1,11 @@
package com.navi.medici.command;
import org.redisson.api.RBloomFilter;
public interface CacheCommands {
Boolean reserveBF(String name);
Boolean add(RBloomFilter<String> bf, String key);
Boolean contains(RBloomFilter<String> bf, String key);
}

View File

@@ -0,0 +1,23 @@
package com.navi.medici.config;
import lombok.Data;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Data
public class RedisConfiguration {
@Value("${redis.host}")
String redisHost;
@Value("${redis.port}")
Integer redisPort;
@Value("${redis.expected.insertions}")
Long expectedInsertions;
@Value("${redis.false.probability}")
Double falseProbability;
}

View File

@@ -0,0 +1,34 @@
package com.navi.medici.container;
import com.navi.medici.config.RedisConfiguration;
import lombok.RequiredArgsConstructor;
import org.redisson.Redisson;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class RedisContainer {
private final RedisConfiguration redisConfiguration;
@Bean
public RedissonClient redissonClient(Config config) {
Config c = new Config();
c.useSingleServer()
.setAddress(String.format("redis://%s:%s", redisConfiguration.getRedisHost(), redisConfiguration.getRedisPort()));
return Redisson.create(config);
}
@Bean
public RBloomFilter<String> bloomFilter(RedissonClient client) {
RBloomFilter<String> bloomFilter = client.getBloomFilter("sample");
bloomFilter.tryInit(55000000L, 0.03);
return bloomFilter;
}
}

View File

@@ -0,0 +1,20 @@
package com.navi.medici;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}

View File

@@ -40,11 +40,11 @@
</repositories>
<dependencies>
<dependency>
<groupId>com.navi.medici.utils</groupId>
<artifactId>event-bus-client</artifactId>
<version>0.1.3-SNAPSHOT</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.navi.medici.utils</groupId>-->
<!-- <artifactId>event-bus-client</artifactId>-->
<!-- <version>0.1.3-SNAPSHOT</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.navi.medici</groupId>
@@ -65,11 +65,17 @@
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
</dependencies>
</project>

View File

@@ -31,7 +31,7 @@ public class HttpExperimentFetcher implements ExperimentFetcher {
.build();
try (Response response = client.newCall(request).execute()) {
if (response.code() > 300) {
if (response.code() < 300) {
var responseBody = response.body();
assert responseBody != null;

View File

@@ -69,7 +69,7 @@ public class LitmusExperimentRepository implements ExperimentRepository {
ready = true;
}
} catch (LitmusException e) {
log.error("litmus exception failed.");
log.error("litmus exception failed.", e);
}
};
}

View File

@@ -5,7 +5,11 @@ import com.navi.medici.util.StrategyUtils;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
@Component
@Log4j2
public class FlexibleRolloutStrategy implements Strategy {
protected static final String PERCENTAGE = "rollout";
@@ -17,9 +21,6 @@ public class FlexibleRolloutStrategy implements Strategy {
this.randomGenerator = () -> Math.random() * 100 + "";
}
public FlexibleRolloutStrategy(Supplier<String> randomGenerator) {
this.randomGenerator = randomGenerator;
}
@Override
public String getName() {

View File

@@ -11,7 +11,7 @@ public class LitmusURLs {
public LitmusURLs(URI litmusAPI) {
try {
String litmusAPIstr = litmusAPI.toString();
fetchExperimentsURL = URI.create(litmusAPIstr + "/client/experiments").normalize().toURL();
fetchExperimentsURL = URI.create(litmusAPIstr + "/experiments").normalize().toURL();
} catch (MalformedURLException ex) {
throw new IllegalArgumentException("Litmus API is not a valid URL: " + litmusAPI);

View File

@@ -25,7 +25,44 @@
<url>${nexus.host}/repository/maven-snapshots</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.navi.medici</groupId>
<artifactId>litmus-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.navi.medici</groupId>
<artifactId>litmus-db</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.navi.medici</groupId>
<artifactId>litmus-cache</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.17.51</version>
</dependency>
<dependency>
<groupId>com.navi.medici.utils</groupId>
<artifactId>event-bus-client</artifactId>
@@ -35,7 +72,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@@ -1,11 +0,0 @@
package com.navi.medici;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

View File

@@ -0,0 +1,12 @@
package com.navi.medici;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LitmusApp {
public static void main(String[] args) {
SpringApplication.run(LitmusApp.class, args);
}
}

View File

@@ -0,0 +1,17 @@
package com.navi.medici.container;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
@Component
public class S3Container {
@Bean
public S3Client amazonS3(@Value("${report.s3.region}") String region) {
return S3Client.builder()
.region(Region.AP_SOUTH_1)
.build();
}
}

View File

@@ -0,0 +1,30 @@
package com.navi.medici.controller.v1;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/experiments")
public class ExperimentController {
@PostMapping(value = "/create", consumes = MediaType.APPLICATION_JSON_VALUE)
public void createExperiment() {
}
@GetMapping
public String fetchExperiments() {
String result = "{\"features\":[{\"name\":\"test-offer\",\"enabled\":true,\"strategies\":[{\"name\":\"flexibleRollout\","
+ "\"parameters\":{\"rollout\":\"24\",\"stickiness\":\"random\",\"groupId\":\"test-offer\"},\"constraints\":[]}],\"variants\":[]},{\"name\":\"test-v1\",\"enabled\":true,\"strategies\":[{\"name\":\"default\",\"parameters\":{}}],\"variants\":[]}],\"version\":1}";
return result;
}
}

View File

@@ -0,0 +1,23 @@
package com.navi.medici.controller.v1;
import com.navi.medici.request.v1.SegmentRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/bucket")
public class SegmentController {
@PostMapping(value = "/create")
public void createSegment(@RequestParam("file") MultipartFile file,
@RequestParam("segment") SegmentRequest segmentRequest) {
}
}

View File

@@ -0,0 +1,18 @@
spring.datasource.hikari.maximum-pool-size=${DB_POOL_MAX_SIZE:2}
spring.datasource.hikari.minimum-idle=${DB_POOL_MIN_IDLE:1}
spring.datasource.hikari.idle-timeout=${DB_POOL_IDLE_TIMEOUT_IN_MS:30000}
spring.datasource.url=${DATASOURCE_URL:jdbc:postgresql://localhost:5432/santa}?stringtype=unspecified
spring.datasource.username=${DATASOURCE_USERNAME:postgres}
spring.datasource.password=${DATASOURCE_PASSWORD:admin}
spring.datasource.initialization-mode=${DATA_INITIALIZATION_MODE:never}
spring.jpa.hibernate.ddl-auto=none
#spring.jpa.properties.hibernate.generate_statistics]=true
#spring.jpa.properties.hibernate.show_sql=true
#spring.jpa.properties.hibernate.use_sql_comments=true
#spring.jpa.properties.hibernate.format_sql=true
kafka.servers=${KAFKA_SERVER:localhost:9092}
audit.kafka.servers=${AUDIT_KAFKA_SERVER:localhost:9092}
kafka.auditlog.topic=${AUDIT_LOG_TOPIC:audit-logs}
kms.base-url=${KMS_BASE_URL:http://google.com}

View File

@@ -0,0 +1,11 @@
appenders=console
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=EcsLayout
appender.console.layout.serviceName=litmus
appender.console.layout.topLevelLabels=correlationId,customerId
rootLogger.level=info
rootLogger.appenderRef.stdout.ref=STDOUT
logger.medici.name=com.navi.medici
logger.medici.level=info

36
litmus-db/pom.xml Normal file
View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>litmus</artifactId>
<groupId>com.navi.medici</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>litmus-db</artifactId>
<version>1.0-SNAPSHOT</version>
<name>litmus-db</name>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,13 @@
package com.navi.medici;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@@ -0,0 +1,75 @@
package com.navi.medici.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Entity
@Table(name = "experiments")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ExperimentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(name = "experiment_id")
String experimentId;
@Column(name = "name")
String name;
@Column(name = "enabled")
Boolean enabled;
@Column(name = "description")
String description;
@Column(name = "archived")
Boolean archived;
@Column(name = "strategies")
String strategies;
@Column(name = "variants")
String variants;
@Column(name = "type")
String type;
@Column(name = "start_time")
LocalDateTime startTime;
@Column(name = "end_time")
LocalDateTime endTime;
@Version
private Integer version;
@Column(name = "created_at")
@CreationTimestamp
LocalDateTime createdAt;
@Column(name = "updated_at")
@UpdateTimestamp
LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,57 @@
package com.navi.medici.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Entity
@Table(name = "segments")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class SegmentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "segment_id")
String segmentId;
@Column(name = "name")
String segmentName;
@Column(name = "description")
String segmentDescription;
@Column(name = "bucket")
String destinationBucket;
@Version
private Integer version;
@Column(name = "created_at")
@CreationTimestamp
LocalDateTime createdAt;
@Column(name = "updated_at")
@UpdateTimestamp
LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,20 @@
package com.navi.medici;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}

25
litmus-liquibase/pom.xml Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>litmus</artifactId>
<groupId>com.navi.medici</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>litmus-liquibase</artifactId>
<version>1.0-SNAPSHOT</version>
<name>litmus-liquibase</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,13 @@
package com.navi.medici;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@@ -0,0 +1,20 @@
package com.navi.medici;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}

53
litmus-mock/pom.xml Normal file
View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>litmus</artifactId>
<groupId>com.navi.medici</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>litmus-mock</artifactId>
<version>1.0-SNAPSHOT</version>
<name>litmus-mock</name>
<dependencies>
<dependency>
<groupId>com.navi.medici</groupId>
<artifactId>litmus-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.navi.medici</groupId>
<artifactId>litmus-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,13 @@
package com.navi.medici;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@@ -0,0 +1,12 @@
package com.navi.medici;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LitmusMockApp {
public static void main(String[] args) {
SpringApplication.run(LitmusMockApp.class, args);
}
}

View File

@@ -0,0 +1,25 @@
package com.navi.medici.container;
import com.navi.medici.config.LitmusConfig;
import com.navi.medici.litmus.DefaultLitmus;
import com.navi.medici.litmus.Litmus;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class MockContainer {
@Bean
public Litmus litmus() {
var litmusConfig = LitmusConfig.builder()
.litmusAPI("http://localhost:8080/v1")
.appName("litmus-mock")
.instanceId("test-instance")
.build();
Litmus unleash = new DefaultLitmus(litmusConfig);
return unleash;
}
}

View File

@@ -0,0 +1,24 @@
package com.navi.medici.controller;
import com.navi.medici.litmus.Litmus;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/v1")
@RequiredArgsConstructor
@Log4j2
public class MockController {
private final Litmus litmus;
@GetMapping("/mock")
public String test() {
var result = litmus.isEnabled("test-offer");
log.info("result ----> {}", result);
return "result ==> " + result;
}
}

View File

@@ -0,0 +1 @@
server.port=11000

View File

@@ -0,0 +1,20 @@
package com.navi.medici;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}

View File

@@ -1,11 +0,0 @@
package com.navi.medici;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

View File

@@ -0,0 +1,48 @@
package com.navi.medici.request.v1;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ExperimentRequest {
@JsonProperty("name")
String name;
@JsonProperty("enabled")
Boolean enabled;
@JsonProperty("description")
String description;
@JsonProperty("archived")
Boolean archived;
@JsonProperty("strategies")
String strategies;
@JsonProperty("variants")
String variants;
@JsonProperty("type")
String type;
@JsonProperty("start_time")
LocalDateTime startTime;
@JsonProperty("end_time")
LocalDateTime endTime;
}

View File

@@ -0,0 +1,26 @@
package com.navi.medici.request.v1;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class SegmentRequest {
String name;
String description;
}

3
local.env Normal file
View File

@@ -0,0 +1,3 @@
DATASOURCE_URL=jdbc:postgresql://dev-db-service-db.np.navi-tech.in:5432/santa
DATASOURCE_USERNAME=service_user
DATASOURCE_PASSWORD=JRCFCMXUXBJHGZVTPBNTXHYCCFVMWN

38
pom.xml
View File

@@ -1,26 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.navi.medici</groupId>
<artifactId>litmus</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>litmus</name>
<modules>
<module>litmus-core</module>
<module>litmus-model</module>
<module>litmus-client</module>
<module>litmus-db</module>
<module>litmus-mock</module>
<module>litmus-liquibase</module>
<module>litmus-cache</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
@@ -31,7 +41,7 @@
<dependency>
<groupId>co.elastic.logging</groupId>
<artifactId>log4j2-ecs-layout</artifactId>
<version>1.0.1</version>
<version>1.1.0</version>
</dependency>
<dependency>
@@ -41,13 +51,13 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
@@ -59,10 +69,20 @@
<configuration>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>