diff --git a/app/server/server/pom.xml b/app/server/server/pom.xml
index 04045af41f..3dcaa8d94c 100644
--- a/app/server/server/pom.xml
+++ b/app/server/server/pom.xml
@@ -23,10 +23,10 @@
org.springframework.boot
spring-boot-starter-cache
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
+
+
+
+
org.springframework.boot
spring-boot-starter-security
@@ -41,6 +41,10 @@
postgresql
runtime
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb-reactive
+
org.projectlombok
lombok
diff --git a/app/server/server/src/main/java/com/mobtools/server/configurations/CommonConfig.java b/app/server/server/src/main/java/com/mobtools/server/configurations/CommonConfig.java
index bd9d22c57e..da1d16ef71 100644
--- a/app/server/server/src/main/java/com/mobtools/server/configurations/CommonConfig.java
+++ b/app/server/server/src/main/java/com/mobtools/server/configurations/CommonConfig.java
@@ -2,12 +2,12 @@ package com.mobtools.server.configurations;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.mongodb.config.EnableMongoAuditing;
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
@Configuration
-@EnableJpaAuditing
+@EnableMongoAuditing
public class CommonConfig {
private String ELASTIC_THREAD_POOL_NAME = "mobtools-elastic-pool";
@@ -16,4 +16,5 @@ public class CommonConfig {
public Scheduler scheduler() {
return Schedulers.newElastic(ELASTIC_THREAD_POOL_NAME);
}
+
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/configurations/MongoConfig.java b/app/server/server/src/main/java/com/mobtools/server/configurations/MongoConfig.java
new file mode 100644
index 0000000000..e634c09136
--- /dev/null
+++ b/app/server/server/src/main/java/com/mobtools/server/configurations/MongoConfig.java
@@ -0,0 +1,27 @@
+package com.mobtools.server.configurations;
+
+import com.mongodb.reactivestreams.client.MongoClient;
+import com.mongodb.reactivestreams.client.MongoClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
+import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
+import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
+
+@EnableReactiveMongoRepositories
+public class MongoConfig extends AbstractReactiveMongoConfiguration {
+
+ @Override
+ public MongoClient reactiveMongoClient() {
+ return MongoClients.create();
+ }
+
+ @Bean
+ public ReactiveMongoTemplate reactiveMongoTemplate() throws Exception {
+ return new ReactiveMongoTemplate(reactiveMongoClient(), "mobtools");
+ }
+
+ @Override
+ protected String getDatabaseName() {
+ return "mobtools";
+ }
+}
diff --git a/app/server/server/src/main/java/com/mobtools/server/controllers/WidgetController.java b/app/server/server/src/main/java/com/mobtools/server/controllers/WidgetController.java
index 717836e17d..5ff12f2910 100644
--- a/app/server/server/src/main/java/com/mobtools/server/controllers/WidgetController.java
+++ b/app/server/server/src/main/java/com/mobtools/server/controllers/WidgetController.java
@@ -38,9 +38,9 @@ public class WidgetController extends BaseController {
.map(widget -> new ResponseDto<>(HttpStatus.OK.value(), widget, null));
}
- @PutMapping("")
- public Mono> update(@RequestBody Widget widget) throws Exception {
- return widgetService.update(widget)
+ @PutMapping("/{id}")
+ public Mono> update(@PathVariable String id, @RequestBody Widget widget) throws Exception {
+ return widgetService.update(id, widget)
.map(updatedWidget -> new ResponseDto<>(HttpStatus.OK.value(), updatedWidget, null));
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/domains/BaseDomain.java b/app/server/server/src/main/java/com/mobtools/server/domains/BaseDomain.java
index 9539c62fbe..96c6b9ce9d 100644
--- a/app/server/server/src/main/java/com/mobtools/server/domains/BaseDomain.java
+++ b/app/server/server/src/main/java/com/mobtools/server/domains/BaseDomain.java
@@ -3,45 +3,41 @@ package com.mobtools.server.domains;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
-import org.hibernate.annotations.DynamicUpdate;
-import org.springframework.data.annotation.CreatedBy;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedBy;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import org.springframework.data.annotation.*;
+import org.springframework.data.domain.Persistable;
-import javax.persistence.*;
-import java.io.Serializable;
import java.util.Date;
-@EntityListeners(AuditingEntityListener.class)
-@MappedSuperclass
@Getter
@Setter
@ToString
-@DynamicUpdate
-public abstract class BaseDomain implements Serializable {
+public abstract class BaseDomain implements Persistable {
private static final long serialVersionUID = 7459916000501322517L;
- @Temporal(TemporalType.TIMESTAMP)
- @Column(nullable = false, updatable = false)
+ @Id
+ private String id;
+
@CreatedDate
protected Date createdAt;
- @Temporal(TemporalType.TIMESTAMP)
- @Column(nullable = false)
@LastModifiedDate
protected Date updatedAt;
- @Column
@CreatedBy
protected String createdBy;
- @Column
@LastModifiedBy
protected String modifiedBy;
- @Column(nullable = false)
protected Boolean deleted = false;
+
+// @Version
+// protected Long version;
+
+ @Override
+ public boolean isNew() {
+ return this.getId() == null;
+ }
+
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/domains/Tenant.java b/app/server/server/src/main/java/com/mobtools/server/domains/Tenant.java
index e40fc2e720..180b568ab0 100644
--- a/app/server/server/src/main/java/com/mobtools/server/domains/Tenant.java
+++ b/app/server/server/src/main/java/com/mobtools/server/domains/Tenant.java
@@ -4,20 +4,15 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
+import org.springframework.data.mongodb.core.mapping.Document;
-import javax.persistence.*;
-@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
-@SequenceGenerator(initialValue = 1, name = "tenant_gen", sequenceName = "tenant_gen")
+@Document
public class Tenant extends BaseDomain {
- @Id
- @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tenant_gen")
- @Column(nullable = false, updatable = false)
- private Long id;
private String domain;
diff --git a/app/server/server/src/main/java/com/mobtools/server/domains/User.java b/app/server/server/src/main/java/com/mobtools/server/domains/User.java
index 81103d4f6a..548c8f1c40 100644
--- a/app/server/server/src/main/java/com/mobtools/server/domains/User.java
+++ b/app/server/server/src/main/java/com/mobtools/server/domains/User.java
@@ -4,27 +4,17 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
+import org.springframework.data.mongodb.core.mapping.Document;
-import javax.persistence.*;
-@Entity
-// Specially adding the table name here because the keyword "User" is reserved in Postgres
-@Table(name = "users")
@Getter
@Setter
@ToString
@NoArgsConstructor
-@SequenceGenerator(initialValue = 1, name = "user_gen", sequenceName = "user_gen")
+@Document
public class User extends BaseDomain {
- @Id
- @Column(nullable = false)
- @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_gen")
- private Long id;
-
- @Column
private String name;
- @Column
private String email;
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/domains/Widget.java b/app/server/server/src/main/java/com/mobtools/server/domains/Widget.java
index b0cc9ef331..9e67c07732 100644
--- a/app/server/server/src/main/java/com/mobtools/server/domains/Widget.java
+++ b/app/server/server/src/main/java/com/mobtools/server/domains/Widget.java
@@ -4,30 +4,19 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
+import org.springframework.data.mongodb.core.mapping.Document;
-import javax.persistence.*;
-@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
-@SequenceGenerator(initialValue = 1, name = "widget_gen", sequenceName = "widget_gen")
+@Document
public class Widget extends BaseDomain {
-
- @Id
- @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "widget_gen")
- @Column(nullable = false, updatable = false)
- private Long id;
-
- @Column
private String name;
- @Column
private WidgetType type;
- @Column
private PricingPlan pricingPlan;
-
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/repositories/BaseRepository.java b/app/server/server/src/main/java/com/mobtools/server/repositories/BaseRepository.java
index 540f84838f..d427e5f80b 100644
--- a/app/server/server/src/main/java/com/mobtools/server/repositories/BaseRepository.java
+++ b/app/server/server/src/main/java/com/mobtools/server/repositories/BaseRepository.java
@@ -1,11 +1,11 @@
package com.mobtools.server.repositories;
-import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
+import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import java.io.Serializable;
@NoRepositoryBean
-public interface BaseRepository extends JpaRepository {
+public interface BaseRepository extends ReactiveCrudRepository {
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/repositories/WidgetRepository.java b/app/server/server/src/main/java/com/mobtools/server/repositories/WidgetRepository.java
index 319ca38962..9a60d022aa 100644
--- a/app/server/server/src/main/java/com/mobtools/server/repositories/WidgetRepository.java
+++ b/app/server/server/src/main/java/com/mobtools/server/repositories/WidgetRepository.java
@@ -2,9 +2,10 @@ package com.mobtools.server.repositories;
import com.mobtools.server.domains.Widget;
import org.springframework.stereotype.Repository;
+import reactor.core.publisher.Mono;
@Repository
public interface WidgetRepository extends BaseRepository {
- Widget findByName(String name);
+ Mono findByName(String name);
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/services/WidgetService.java b/app/server/server/src/main/java/com/mobtools/server/services/WidgetService.java
index 9f0751778b..484c73dd61 100644
--- a/app/server/server/src/main/java/com/mobtools/server/services/WidgetService.java
+++ b/app/server/server/src/main/java/com/mobtools/server/services/WidgetService.java
@@ -12,5 +12,5 @@ public interface WidgetService {
Mono create(Widget widget);
- Mono update(Widget widget) throws Exception;
+ Mono update(String id, Widget widget) throws Exception;
}
diff --git a/app/server/server/src/main/java/com/mobtools/server/services/WidgetServiceImpl.java b/app/server/server/src/main/java/com/mobtools/server/services/WidgetServiceImpl.java
index 0e1edae772..a9d1ecd40b 100644
--- a/app/server/server/src/main/java/com/mobtools/server/services/WidgetServiceImpl.java
+++ b/app/server/server/src/main/java/com/mobtools/server/services/WidgetServiceImpl.java
@@ -2,8 +2,15 @@ package com.mobtools.server.services;
import com.mobtools.server.domains.Widget;
import com.mobtools.server.repositories.WidgetRepository;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
+import org.springframework.data.mongodb.core.convert.MongoConverter;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -15,40 +22,61 @@ public class WidgetServiceImpl extends BaseService implements WidgetService {
private WidgetRepository widgetRepository;
+ private final MongoConverter mongoConverter;
+
+ private final ReactiveMongoTemplate mongoTemplate;
+
@Autowired
- public WidgetServiceImpl(Scheduler scheduler, WidgetRepository widgetRepository) {
+ public WidgetServiceImpl(Scheduler scheduler, WidgetRepository widgetRepository, MongoConverter mongoConverter, ReactiveMongoTemplate mongoTemplate) {
super(scheduler);
this.widgetRepository = widgetRepository;
+ this.mongoConverter = mongoConverter;
+ this.mongoTemplate = mongoTemplate;
}
@Override
public Mono getByName(String name) {
- return Mono.fromCallable(() -> widgetRepository.findByName(name))
- .subscribeOn(scheduler);
+ return widgetRepository.findByName(name);
+
}
@Override
public Flux get() {
- return Mono.fromCallable(() -> widgetRepository.findAll())
- .flatMapMany(Flux::fromIterable)
- .subscribeOn(scheduler);
+ return widgetRepository.findAll();
}
@Override
public Mono create(Widget widget) {
- return Mono.fromCallable(
- () -> widgetRepository.save(widget)
- ).subscribeOn(this.scheduler);
+
+ return widgetRepository.save(widget);
+
}
@Override
- public Mono update(Widget widget) throws Exception {
- if(widget.getId() == null) {
+ public Mono update(String id, Widget widget) throws Exception {
+ if (id == null) {
throw new Exception("Invalid id provided");
}
- return Mono.fromCallable(
- () -> widgetRepository.save(widget)
- ).subscribeOn(this.scheduler);
+ Query query = new Query();
+ query.addCriteria(Criteria.where("id").is(id));
+
+ Update updateObj = new Update();
+
+// DBObject update = getDbObject(widget);
+// Map updateMap = update.toMap();
+// updateMap.entrySet().stream().forEach(entry -> {
+// updateObj.set(entry.getKey(), entry.getValue());
+// });
+ updateObj.set("name", "testName");
+ mongoTemplate.updateFirst(query,updateObj, Widget.class);
+ return widgetRepository.save(widget);
+
+ }
+
+ private DBObject getDbObject(Object o) {
+ BasicDBObject basicDBObject = new BasicDBObject();
+ mongoConverter.write(o, basicDBObject);
+ return basicDBObject;
}
}
diff --git a/app/server/server/src/main/resources/application.properties b/app/server/server/src/main/resources/application.properties
index d3250adf5a..b50ca792ec 100644
--- a/app/server/server/src/main/resources/application.properties
+++ b/app/server/server/src/main/resources/application.properties
@@ -14,3 +14,10 @@ spring.jpa.show-sql=true
# Jackson Properties
spring.jackson.default-property-inclusion=non_null
+#Mongo properties
+spring.data.mongodb.database=mobtools
+spring.data.mongodb.host=localhost
+spring.data.mongodb.port=27017
+#spring.data.mongodb.username=
+#spring.data.mongodb.password=
+