diff --git a/pom.xml b/pom.xml
index 6fb4170..62f36a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,11 +38,14 @@
org.springframework.boot
spring-boot-starter-websocket
-
+
+ com.google.code.gson
+ gson
+ 2.10.1
+
org.springframework.boot
spring-boot-starter-test
- test
org.springframework.data
diff --git a/src/main/java/callhub/connect/CallhubconnectApplication.java b/src/main/java/callhub/connect/CallhubconnectApplication.java
index b22789a..70956a4 100644
--- a/src/main/java/callhub/connect/CallhubconnectApplication.java
+++ b/src/main/java/callhub/connect/CallhubconnectApplication.java
@@ -12,8 +12,6 @@
@SpringBootApplication
@Configuration
-@EnableAutoConfiguration
-@ComponentScan
public class CallhubconnectApplication {
@Value("${azure}")
@@ -28,10 +26,15 @@ public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/**").allowedOrigins("azureEndpoint");
- registry.addMapping("/**").allowedOrigins("http://localhost:8080/");
- registry.addMapping("/**").allowedOrigins("http://localhost:3000/");
- registry.addMapping("/**").allowedOrigins("https://callhub.netlify.app/");
+ registry.addMapping("/**").
+ allowedOrigins(
+ "http://localhost:8080",
+ "http://localhost:3000",
+ "https://callhub.netlify.app",
+ azureEndpoint // Use the actual value of azureEndpoint
+ ).allowedMethods("GET", "POST", "PUT", "DELETE")
+ .allowedHeaders("*")
+ .allowCredentials(true);
}
};
}
diff --git a/src/main/java/callhub/connect/MainController.java b/src/main/java/callhub/connect/MainController.java
index b70b3d0..e2ae02f 100644
--- a/src/main/java/callhub/connect/MainController.java
+++ b/src/main/java/callhub/connect/MainController.java
@@ -1,7 +1,7 @@
package callhub.connect;
import callhub.connect.entities.Message;
-import callhub.connect.use_case.MessageRepository;
+import callhub.connect.data_access.MessageRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.web.bind.annotation.*;
diff --git a/src/main/java/callhub/connect/use_case/MessageRepository.java b/src/main/java/callhub/connect/data_access/MessageRepository.java
similarity index 90%
rename from src/main/java/callhub/connect/use_case/MessageRepository.java
rename to src/main/java/callhub/connect/data_access/MessageRepository.java
index 2584333..e1296c1 100644
--- a/src/main/java/callhub/connect/use_case/MessageRepository.java
+++ b/src/main/java/callhub/connect/data_access/MessageRepository.java
@@ -1,4 +1,4 @@
-package callhub.connect.use_case;
+package callhub.connect.data_access;
import callhub.connect.entities.Message;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
diff --git a/src/main/java/callhub/connect/data_access/SessionRepository.java b/src/main/java/callhub/connect/data_access/SessionRepository.java
new file mode 100644
index 0000000..96adcba
--- /dev/null
+++ b/src/main/java/callhub/connect/data_access/SessionRepository.java
@@ -0,0 +1,11 @@
+package callhub.connect.data_access;
+
+import callhub.connect.entities.Session;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface SessionRepository extends MongoRepository {
+
+ boolean existsByCodeAndActive(String code, boolean active);
+
+ Session getSessionsByActiveAndCode(boolean active, String code);
+}
diff --git a/src/main/java/callhub/connect/entities/Session.java b/src/main/java/callhub/connect/entities/Session.java
new file mode 100644
index 0000000..7acdf03
--- /dev/null
+++ b/src/main/java/callhub/connect/entities/Session.java
@@ -0,0 +1,36 @@
+package callhub.connect.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+
+@Document("sessions")
+public class Session {
+ @Id
+ private String id;
+
+ private String code;
+ private java.util.Date startTime;
+
+ private boolean active;
+ private ArrayList messages;
+ // private ArrayList<> documents;
+
+ public Session(boolean active, String code){
+ this.active = active;
+ this.messages = new ArrayList();
+ this.startTime = new java.util.Date(System.currentTimeMillis());
+ this.code = code;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+}
diff --git a/src/main/java/callhub/connect/use_case/SessionController.java b/src/main/java/callhub/connect/use_case/SessionController.java
new file mode 100644
index 0000000..772dda2
--- /dev/null
+++ b/src/main/java/callhub/connect/use_case/SessionController.java
@@ -0,0 +1,72 @@
+package callhub.connect.use_case;
+
+import callhub.connect.data_access.MessageRepository;
+import callhub.connect.data_access.SessionRepository;
+import callhub.connect.entities.Message;
+import callhub.connect.entities.Session;
+import com.google.gson.Gson;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.security.SecureRandom;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+@RestController
+@RequestMapping("/session")
+public class SessionController {
+
+ public SessionRepository sessionRepository;
+ private static final Gson gson = new Gson();
+
+ private final static int CODE_LENGTH = 6;
+
+ public SessionController(SessionRepository sessionRepository){
+ this.sessionRepository = sessionRepository;
+ }
+
+ @GetMapping("/new-session")
+ public ResponseEntity newSession() {
+ HttpHeaders headers = new HttpHeaders();
+ Session session = sessionRepository.save(new Session(true, generateSessionCode()));
+ // Create response
+ HashMap responseBody = new HashMap<>();
+ responseBody.put("sessionCode", session.getCode());
+ responseBody.put("sessionId", session.getId());
+ return new ResponseEntity<>(gson.toJson(responseBody), headers, HttpStatus.OK);
+ }
+
+ @GetMapping("/join/{code}")
+ public ResponseEntity joinSession(@PathVariable String code) {
+ HttpHeaders headers = new HttpHeaders();
+ Session session = sessionRepository.getSessionsByActiveAndCode(true, code);
+ // Create response
+ HashMap responseBody = new HashMap<>();
+ responseBody.put("sessionCode", session.getCode());
+ responseBody.put("sessionId", session.getId());
+ return new ResponseEntity<>(gson.toJson(responseBody), headers, HttpStatus.OK);
+ }
+
+ private String generateSessionCode(){
+ final String ALLOWED_CHAR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ SecureRandom random = new SecureRandom();
+ StringBuilder code = new StringBuilder(CODE_LENGTH);
+ do {
+ for (int i = 0; i < CODE_LENGTH; i++) {
+ code.append(ALLOWED_CHAR.charAt(random.nextInt(ALLOWED_CHAR.length())));
+ }
+
+ } while (sessionRepository.existsByCodeAndActive(code.toString(), true)); //ensures code is unique
+
+ return code.toString();
+ }
+
+
+}