This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/cybershuttle-staging by this
push:
new c8c3b21492 spawn containers with the given project, reattach to
existing sessions, service updates, and data initializations
c8c3b21492 is described below
commit c8c3b21492fc204df8cadd185173d56189318c39
Author: lahiruj <[email protected]>
AuthorDate: Mon Mar 31 17:05:24 2025 -0400
spawn containers with the given project, reattach to existing sessions,
service updates, and data initializations
---
.../airavata/research/service/DataInitializer.java | 67 ++++++++++++++++++++++
.../service/ResearchServiceApplication.java | 9 +--
.../research/service/config/AuthzTokenFilter.java | 4 +-
.../research/service/handlers/ProjectHandler.java | 15 +++++
.../service/handlers/ResearchHubHandler.java | 24 ++++----
.../research/service/handlers/SessionHandler.java | 13 +++++
.../research/service/handlers/UserHandler.java | 33 ++++++-----
.../research/service/model/UserContext.java | 20 +++----
.../research/service/model/entity/Project.java | 36 +++++++++++-
.../research/service/model/entity/Resource.java | 30 ++++++++++
.../research/service/model/entity/Session.java | 26 ++++-----
.../research/service/model/entity/User.java | 23 ++++----
12 files changed, 233 insertions(+), 67 deletions(-)
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
new file mode 100644
index 0000000000..5d7389cdb8
--- /dev/null
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
@@ -0,0 +1,67 @@
+package org.apache.airavata.research.service;
+
+import org.apache.airavata.research.service.enums.PrivacyEnum;
+import org.apache.airavata.research.service.enums.StatusEnum;
+import org.apache.airavata.research.service.model.entity.DatasetResource;
+import org.apache.airavata.research.service.model.entity.Project;
+import org.apache.airavata.research.service.model.entity.RepositoryResource;
+import org.apache.airavata.research.service.model.entity.User;
+import org.apache.airavata.research.service.model.repo.ProjectRepository;
+import org.apache.airavata.research.service.model.repo.ResourceRepository;
+import org.apache.airavata.research.service.model.repo.UserRepository;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DataInitializer implements CommandLineRunner {
+
+ private final UserRepository userRepository;
+ private final ProjectRepository projectRepository;
+ private final ResourceRepository resourceRepository;
+
+ public DataInitializer(UserRepository userRepository, ProjectRepository
projectRepository, ResourceRepository resourceRepository) {
+ this.userRepository = userRepository;
+ this.projectRepository = projectRepository;
+ this.resourceRepository = resourceRepository;
+ }
+
+ @Override
+ public void run(String... args) {
+ cleanup();
+
+ User user = new User("[email protected]", "airavata", "admin",
"[email protected]");
+ userRepository.save(user);
+
+ RepositoryResource repositoryResource = new RepositoryResource();
+ repositoryResource.setName("BMTK Repository");
+ repositoryResource.setDescription("Repository for the BMTK workshop
project");
+ repositoryResource.setHeaderImage("header_image.png");
+
repositoryResource.setRepositoryUrl("https://github.com/AllenInstitute/bmtk-workshop.git");
+ repositoryResource.setStatus(StatusEnum.VERIFIED);
+ repositoryResource.setPrivacy(PrivacyEnum.PUBLIC);
+ repositoryResource = resourceRepository.save(repositoryResource);
+
+ DatasetResource datasetResource = new DatasetResource();
+ datasetResource.setName("BMTK Dataset");
+ datasetResource.setDescription("Dataset for the BMTK workshop
project");
+ datasetResource.setHeaderImage("header_image.png");
+ datasetResource.setDatasetUrl("bmtk");
+ datasetResource.setStatus(StatusEnum.VERIFIED);
+ datasetResource.setPrivacy(PrivacyEnum.PUBLIC);
+ datasetResource = resourceRepository.save(datasetResource);
+
+ Project project = new Project();
+ project.setRepositoryResource(repositoryResource);
+ project.getDatasetResources().add(datasetResource);
+
+ projectRepository.save(project);
+
+ System.out.println("Initialized Project with id: " + project.getId());
+ }
+
+ public void cleanup() {
+ userRepository.deleteAll();
+ projectRepository.deleteAll();
+ resourceRepository.deleteAll();
+ }
+}
\ No newline at end of file
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/ResearchServiceApplication.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/ResearchServiceApplication.java
index 688ae0ec29..136ffecb76 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/ResearchServiceApplication.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/ResearchServiceApplication.java
@@ -1,5 +1,4 @@
/**
- *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -7,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -21,10 +20,12 @@ package org.apache.airavata.research.service;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories()
+@EnableJpaAuditing
public class ResearchServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ResearchServiceApplication.class, args);
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
index b8d281b47c..0feac1cf6a 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
@@ -42,6 +42,7 @@ import java.util.Map;
public class AuthzTokenFilter extends OncePerRequestFilter {
private static final Logger LOGGER =
LoggerFactory.getLogger(AuthzTokenFilter.class);
+ private static final String USERNAME_CLAIM = "userName";
private final UserHandler userHandler;
@@ -76,7 +77,8 @@ public class AuthzTokenFilter extends OncePerRequestFilter {
authzToken.setClaimsMap(claimsMap);
UserContext.setAuthzToken(authzToken);
- userHandler.initializeUser(UserContext.username());
+
UserContext.setUser(userHandler.initializeOrGetUser(claimsMap.get(USERNAME_CLAIM)));
+
} catch (Exception e) {
LOGGER.error("Invalid authorization data", e);
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid
authorization data");
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
index 7bea3e254e..eb76fcf939 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
@@ -18,6 +18,9 @@
*/
package org.apache.airavata.research.service.handlers;
+import jakarta.persistence.EntityNotFoundException;
+import org.apache.airavata.research.service.model.entity.Project;
+import org.apache.airavata.research.service.model.repo.ProjectRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -27,4 +30,16 @@ public class ProjectHandler {
private static final Logger LOGGER =
LoggerFactory.getLogger(ProjectHandler.class);
+ private final ProjectRepository projectRepository;
+
+ public ProjectHandler(ProjectRepository projectRepository) {
+ this.projectRepository = projectRepository;
+ }
+
+ public Project findProject(String projectId) {
+ return projectRepository.findById(projectId).orElseThrow(() -> {
+ LOGGER.error("Unable to find a Project with id: " + projectId);
+ return new EntityNotFoundException("Unable to find a Project with
id: " + projectId);
+ });
+ }
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
index 01d8cc01fb..308edd7dbe 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
@@ -19,14 +19,14 @@
package org.apache.airavata.research.service.handlers;
import org.apache.airavata.research.service.model.UserContext;
+import org.apache.airavata.research.service.model.entity.DatasetResource;
+import org.apache.airavata.research.service.model.entity.Project;
import org.apache.airavata.research.service.model.entity.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import java.util.UUID;
-
@Service
public class ResearchHubHandler {
@@ -46,19 +46,23 @@ public class ResearchHubHandler {
}
public String spinRHubSession(String projectId, String sessionName) {
- // TODO fix the conflict of Project vs Resource
- // TODO extract the data using the projectId
- String gitUrl = "https://github.com/AllenInstitute/bmtk-workshop.git";
- String dataPath = "bmtk";
- String randomSessionName = "session-" +
UUID.randomUUID().toString().substring(0, 6);
- System.out.println("Session: " + randomSessionName);
- return String.format(RH_SPAWN_URL, csHubUrl, UserContext.username(),
randomSessionName, gitUrl, dataPath);
+ Project project = projectHandler.findProject(projectId);
+ // TODO should support multiple data sets for RHub
+ DatasetResource dataset =
project.getDatasetResources().stream().findFirst().get();
+ Session session = sessionHandler.createSession(sessionName, project);
+
+ String spawnUrl = String.format(RH_SPAWN_URL, csHubUrl,
UserContext.username(), session.getId(),
project.getRepositoryResource().getRepositoryUrl(), dataset.getDatasetUrl());
+ LOGGER.debug("Generated the spawn url: {} for the user: {} against the
project: {}", spawnUrl, UserContext.username(), projectId);
+ return spawnUrl;
}
public String resolveRHubExistingSession(String sessionId) {
LOGGER.debug("Resolving RH session id {} for user: {}", sessionId,
UserContext.username());
// TODO restrict this execution for owner
Session session = sessionHandler.findSession(sessionId);
- return String.format(RH_SESSION_URL, csHubUrl, UserContext.username(),
session.getId());
+
+ String sessionUrl = String.format(RH_SESSION_URL, csHubUrl,
UserContext.username(), session.getId());
+ LOGGER.debug("Generated the session url: {} for the user: {}",
sessionUrl, UserContext.username());
+ return sessionUrl;
}
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/SessionHandler.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/SessionHandler.java
index 367380c867..d9c56d6127 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/SessionHandler.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/SessionHandler.java
@@ -19,12 +19,17 @@
package org.apache.airavata.research.service.handlers;
import jakarta.persistence.EntityNotFoundException;
+import org.apache.airavata.research.service.model.UserContext;
+import org.apache.airavata.research.service.model.entity.Project;
import org.apache.airavata.research.service.model.entity.Session;
import org.apache.airavata.research.service.model.repo.SessionRepository;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import java.util.UUID;
+
@Service
public class SessionHandler {
@@ -42,4 +47,12 @@ public class SessionHandler {
return new EntityNotFoundException("Unable to find session with
id: " + sessionId);
});
}
+
+ public Session createSession(String sessionName, Project project) {
+ sessionName = StringUtils.isNotBlank(sessionName) ? sessionName :
UUID.randomUUID().toString().substring(0, 6);
+ Session session = new Session(sessionName, UserContext.user(),
project);
+ session = sessionRepository.save(session);
+ LOGGER.debug("Created session with Id: {}, Name: {}", session.getId(),
sessionName);
+ return session;
+ }
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
index e984a53f08..7959c37676 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
@@ -18,6 +18,7 @@
*/
package org.apache.airavata.research.service.handlers;
+import jakarta.persistence.EntityNotFoundException;
import org.apache.airavata.research.CreateUserRequest;
import org.apache.airavata.research.service.model.entity.User;
import org.apache.airavata.research.service.model.repo.UserRepository;
@@ -25,8 +26,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
-import java.util.Date;
-
@Service
public class UserHandler {
@@ -48,9 +47,6 @@ public class UserHandler {
user.setFirstName(userRequest.getFirstName());
user.setLastName(userRequest.getLastName());
user.setEmail(userRequest.getEmail());
- Date date = new Date(); // same date for createdAt and updatedAt
- user.setCreatedAt(date);
- user.setUpdatedAt(date);
user.setAvatar(userRequest.getAvatar());
return userRepository.save(user);
@@ -70,16 +66,25 @@ public class UserHandler {
return userRepository.findByEmail(email);
}
- public void initializeUser(String username) {
- userRepository.findByUsername(username).ifPresentOrElse(
- user -> LOGGER.info("User {} is already registered.",
username),
- () -> {
- // TODO initialize this using the airavata userprofile
+ public User findUserByUsername(String username) {
+ return userRepository.findById(username).orElseThrow(() -> {
+ LOGGER.error("Unable to find a User with a username: " + username);
+ return new EntityNotFoundException("Unable to find a User with a
username: " + username);
+ });
+ }
+
+ public User initializeOrGetUser(String username) {
+ return userRepository.findByUsername(username)
+ .map(user -> {
+ LOGGER.debug("User {} is already registered.", username);
+ return user;
+ })
+ .orElseGet(() -> {
+ // TODO: Initialize this using the Airavata user profile
if needed.
User newUser = new User(username, "CHANGE_ME",
"CHANGE_ME", username);
- userRepository.save(newUser);
+ newUser = userRepository.save(newUser);
LOGGER.info("Initialized new user with username {}.",
username);
- }
- );
+ return newUser;
+ });
}
-
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/UserContext.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/UserContext.java
index b128cfb331..f4ce77d1d0 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/UserContext.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/UserContext.java
@@ -19,12 +19,12 @@
package org.apache.airavata.research.service.model;
import org.apache.airavata.model.security.AuthzToken;
-
-import java.util.Map;
+import org.apache.airavata.research.service.model.entity.User;
public class UserContext {
private static final ThreadLocal<AuthzToken> AUTHZ_TOKEN = new
ThreadLocal<>();
+ private static final ThreadLocal<User> CURRENT_USER = new ThreadLocal<>();
public static AuthzToken authzToken() {
return AUTHZ_TOKEN.get();
@@ -34,19 +34,15 @@ public class UserContext {
AUTHZ_TOKEN.set(token);
}
- public static String username() {
- return getClaim("userName");
+ public static User user() {
+ return CURRENT_USER.get();
}
- public static String gatewayId() {
- return getClaim("gatewayID");
+ public static void setUser(User user) {
+ CURRENT_USER.set(user);
}
- private static String getClaim(String claimId) {
- return AUTHZ_TOKEN.get().getClaimsMap().entrySet().stream()
- .filter(entry -> entry.getKey().equalsIgnoreCase(claimId))
- .map(Map.Entry::getValue)
- .findFirst()
- .orElseThrow(() -> new IllegalArgumentException("Missing '" +
claimId + "' claim in the authentication token"));
+ public static String username() {
+ return CURRENT_USER.get().getUsername();
}
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Project.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Project.java
index a486fe03c1..7431ee79fb 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Project.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Project.java
@@ -21,6 +21,7 @@ package org.apache.airavata.research.service.model.entity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@@ -29,11 +30,16 @@ import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import org.hibernate.annotations.UuidGenerator;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import java.time.Instant;
import java.util.HashSet;
import java.util.Set;
@Entity(name = "PROJECT")
+@EntityListeners(AuditingEntityListener.class)
public class Project {
@Id
@@ -46,7 +52,7 @@ public class Project {
@JoinColumn(name = "repository_resource_id")
private RepositoryResource repositoryResource;
- @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+ @ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "project_dataset",
joinColumns = @JoinColumn(name = "project_id"),
@@ -54,6 +60,14 @@ public class Project {
)
private Set<DatasetResource> datasetResources = new HashSet<>();
+ @Column(nullable = false, updatable = false)
+ @CreatedDate
+ private Instant createdAt;
+
+ @Column(nullable = false)
+ @LastModifiedDate
+ private Instant updatedAt;
+
public String getId() {
return id;
}
@@ -77,4 +91,24 @@ public class Project {
public void setDatasetResources(Set<DatasetResource> datasetResources) {
this.datasetResources = datasetResources;
}
+
+ public void addDatasetResource(DatasetResource datasetResource) {
+ this.datasetResources.add(datasetResource);
+ }
+
+ public Instant getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(Instant createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public Instant getUpdatedAt() {
+ return updatedAt;
+ }
+
+ public void setUpdatedAt(Instant updatedAt) {
+ this.updatedAt = updatedAt;
+ }
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Resource.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Resource.java
index 2019605857..9c3fca15c7 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Resource.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Resource.java
@@ -21,6 +21,7 @@ package org.apache.airavata.research.service.model.entity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
@@ -35,13 +36,18 @@ import jakarta.persistence.Table;
import org.apache.airavata.research.service.enums.PrivacyEnum;
import org.apache.airavata.research.service.enums.StatusEnum;
import org.hibernate.annotations.UuidGenerator;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import java.time.Instant;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "RESOURCE")
@Inheritance(strategy = InheritanceType.JOINED)
+@EntityListeners(AuditingEntityListener.class)
public abstract class Resource {
@Id
@@ -83,6 +89,14 @@ public abstract class Resource {
@Enumerated(EnumType.STRING)
private PrivacyEnum privacy;
+ @Column(nullable = false, updatable = false)
+ @CreatedDate
+ private Instant createdAt;
+
+ @Column(nullable = false)
+ @LastModifiedDate
+ private Instant updatedAt;
+
public String getHeaderImage() {
return headerImage;
}
@@ -146,4 +160,20 @@ public abstract class Resource {
public void
setPrivacy(org.apache.airavata.research.service.enums.PrivacyEnum privacy) {
this.privacy = privacy;
}
+
+ public Instant getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(Instant createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public Instant getUpdatedAt() {
+ return updatedAt;
+ }
+
+ public void setUpdatedAt(Instant updatedAt) {
+ this.updatedAt = updatedAt;
+ }
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
index a436d03b43..46f7d47391 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
@@ -20,22 +20,23 @@ package org.apache.airavata.research.service.model.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
-import jakarta.persistence.Temporal;
-import jakarta.persistence.TemporalType;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-import java.util.Date;
+import java.time.Instant;
@Entity
@Table(name = "SESSION")
+@EntityListeners(AuditingEntityListener.class)
public class Session {
@Id
@@ -55,22 +56,21 @@ public class Session {
@JoinColumn(name = "project_id")
private Project project;
- @Column(nullable = false)
- @Temporal(TemporalType.TIMESTAMP)
+ @Column(nullable = false, updatable = false)
@CreatedDate
- private Date createdAt;
+ private Instant createdAt;
@Column(nullable = false)
- @Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
- private Date updatedAt;
+ private Instant updatedAt;
public Session() {
}
- public Session(String sessionName, User user) {
+ public Session(String sessionName, User user, Project project) {
this.sessionName = sessionName;
this.user = user;
+ this.project = project;
}
public String getId() {
@@ -105,19 +105,19 @@ public class Session {
this.project = project;
}
- public java.util.Date getCreatedAt() {
+ public Instant getCreatedAt() {
return createdAt;
}
- public void setCreatedAt(java.util.Date createdAt) {
+ public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
- public java.util.Date getUpdatedAt() {
+ public Instant getUpdatedAt() {
return updatedAt;
}
- public void setUpdatedAt(java.util.Date updatedAt) {
+ public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}
}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
index e1b4b59746..dd4d5e33e1 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
@@ -20,19 +20,20 @@ package org.apache.airavata.research.service.model.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
-import jakarta.persistence.Temporal;
-import jakarta.persistence.TemporalType;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-import java.util.Date;
+import java.time.Instant;
@Entity
@Table(name = "AUTHOR")
+@EntityListeners(AuditingEntityListener.class)
public class User {
@Id
@@ -53,15 +54,13 @@ public class User {
@Column(nullable = false)
private String email;
- @Column(nullable = false)
- @Temporal(TemporalType.TIMESTAMP)
+ @Column(nullable = false, updatable = false)
@CreatedDate
- private Date createdAt;
+ private Instant createdAt;
@Column(nullable = false)
- @Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
- private Date updatedAt;
+ private Instant updatedAt;
@Column(nullable = true)
private String avatar;
@@ -116,19 +115,19 @@ public class User {
this.email = email;
}
- public java.util.Date getCreatedAt() {
+ public Instant getCreatedAt() {
return createdAt;
}
- public void setCreatedAt(java.util.Date createdAt) {
+ public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
- public java.util.Date getUpdatedAt() {
+ public Instant getUpdatedAt() {
return updatedAt;
}
- public void setUpdatedAt(java.util.Date updatedAt) {
+ public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}