Skip to content
Snippets Groups Projects
Unverified Commit aaaa32c8 authored by Martin Weise's avatar Martin Weise
Browse files

Fixed ElasticSearch

parent 6d5a6d70
Branches
Tags
2 merge requests!81New stable release,!80Multiple features connected with user management and ownership of databases
This commit is part of merge request !81. Comments created here will be created in the context of that merge request.
Showing
with 228 additions and 238 deletions
package at.tuwien;
import at.tuwien.api.database.DatabaseCreateDto;
import at.tuwien.api.database.DatabaseModifyDto;
import at.tuwien.api.database.LanguageTypeDto;
import at.tuwien.api.database.LicenseDto;
import at.tuwien.entities.container.Container;
import at.tuwien.entities.container.image.ContainerImage;
import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType;
import at.tuwien.entities.database.Database;
import at.tuwien.entities.database.License;
import at.tuwien.entities.database.table.Table;
import at.tuwien.entities.user.User;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.context.TestPropertySource;
import java.time.Instant;
......@@ -22,7 +29,26 @@ public abstract class BaseUnitTest {
public final static String BROKER_IMAGE = "rabbitmq";
public final static String BROKER_TAG = "3-alpine";
public final static String SEARCH_NAME = "fda-search-mock-service";
public final static String SEARCH_IP = "172.29.0.3";
public final static String SEARCH_HOSTNAME = "fda-search-mock-service";
public final static String SEARCH_IMAGE = "elasticsearch";
public final static String SEARCH_TAG = "7.13.4";
public final static Long USER_1_ID = 1L;
public final static String USER_1_USERNAME = "junit";
public final static String USER_1_PASSWORD = "junit";
public final static String USER_1_EMAIL = "junit@ossdip.at";
public final static Boolean USER_1_VERIFIED = true;
public final static Boolean USER_1_THEME = false;
public final static User USER_1 = User.builder()
.id(USER_1_ID)
.username(USER_1_USERNAME)
.email(USER_1_EMAIL)
.emailVerified(USER_1_VERIFIED)
.themeDark(USER_1_THEME)
.build();
public final static Long IMAGE_1_ID = 1L;
public final static String IMAGE_1_REPOSITORY = "mariadb";
......@@ -61,15 +87,50 @@ public abstract class BaseUnitTest {
.value("mariadb")
.build());
public final static String LICENSE_1_IDENTIFIER = "MIT";
public final static String LICENSE_1_URI = "https://opensource.org/licenses/MIT";
public final static License LICENSE_1 = License.builder()
.identifier(LICENSE_1_IDENTIFIER)
.uri(LICENSE_1_URI)
.build();
public final static LicenseDto LICENSE_1_DTO = LicenseDto.builder()
.identifier(LICENSE_1_IDENTIFIER)
.uri(LICENSE_1_URI)
.build();
public final static Long DATABASE_1_ID = 1L;
public final static String DATABASE_1_NAME = "Weather";
public final static String DATABASE_1_DESCRIPTION = "Weather somewhere in the world";
public final static String DATABASE_1_PUBLISHER = "TU Wien";
public final static Boolean DATABASE_1_PUBLIC = false;
public final static String DATABASE_1_INTERNALNAME = "weather";
public final static String DATABASE_1_EXCHANGE = "fda." + DATABASE_1_INTERNALNAME;
public final static Instant DATABASE_1_CREATED = Instant.now().minus(1, HOURS);
public final static Instant DATABASE_1_UPDATED = Instant.now();
public final static DatabaseCreateDto DATABASE_1_CREATE = DatabaseCreateDto.builder()
.name(DATABASE_1_NAME)
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.build();
public final static DatabaseModifyDto DATABASE_1_UPDATE1 = DatabaseModifyDto.builder()
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.language(LanguageTypeDto.EN)
.build();
public final static DatabaseModifyDto DATABASE_1_UPDATE2 = DatabaseModifyDto.builder()
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.language(LanguageTypeDto.EN)
.license(LICENSE_1_DTO)
.publication("2022-08-01")
.publisher(DATABASE_1_PUBLISHER)
.build();
public final static Long DATABASE_2_ID = 2L;
public final static String DATABASE_2_NAME = "Weather AT";
public final static Boolean DATABASE_2_PUBLIC = false;
......
......@@ -35,7 +35,7 @@ public class DockerConfig {
.withDockerHttpClient(dockerHttpClient)
.build();
public static void startContainer(Container container) throws InterruptedException {
public static void startContainer(Container container, Integer seconds) throws InterruptedException {
final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
.exec();
log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
......@@ -45,10 +45,14 @@ public class DockerConfig {
log.trace("container {} needs to be started", container.getHash());
dockerClient.startContainerCmd(container.getHash())
.exec();
Thread.sleep(12 * 1000L);
Thread.sleep(seconds * 1000L);
log.debug("container {} was started", container.getHash());
}
public static void startContainer(Container container) throws InterruptedException {
startContainer(container, 15);
}
public static void createContainer(Container container) {
final CreateContainerResponse response = dockerClient.createContainerCmd(container.getImage().getRepository() + ":" + container.getImage().getTag())
.withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
......@@ -73,4 +77,14 @@ public class DockerConfig {
log.debug("container {} was stopped", container.getHash());
}
public static void removeContainer(Container container) {
final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
.exec();
log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
log.trace("container {} needs to be removed", container.getHash());
dockerClient.removeContainerCmd(container.getHash())
.exec();
log.debug("container {} was removed", container.getHash());
}
}
......@@ -8,13 +8,14 @@ import at.tuwien.entities.container.Container;
import at.tuwien.entities.database.Database;
import at.tuwien.exception.*;
import at.tuwien.repository.elastic.DatabaseidxRepository;
import at.tuwien.repository.jpa.ContainerRepository;
import at.tuwien.repository.jpa.DatabaseRepository;
import at.tuwien.repository.jpa.ImageRepository;
import at.tuwien.repository.jpa.*;
import at.tuwien.service.impl.HibernateConnector;
import at.tuwien.service.impl.MariaDbServiceImpl;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Network;
import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2;
......@@ -24,6 +25,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;
......@@ -31,8 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.security.Principal;
import java.util.Optional;
import static at.tuwien.config.DockerConfig.dockerClient;
import static at.tuwien.config.DockerConfig.hostConfig;
import static at.tuwien.config.DockerConfig.*;
import static org.junit.jupiter.api.Assertions.*;
@Log4j2
......@@ -47,25 +48,28 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
@MockBean
private Channel channel;
@MockBean
private DatabaseidxRepository databaseidxRepository;
@Autowired
private ImageRepository imageRepository;
@Autowired
private DatabaseRepository databaseRepository;
private MariaDbServiceImpl databaseService;
@Autowired
private ContainerRepository containerRepository;
private UserRepository userRepository;
@Autowired
private MariaDbServiceImpl databaseService;
private LicenseRepository licenseRepository;
@Autowired
private ContainerRepository containerRepository;
@Autowired
private HibernateConnector hibernateConnector;
private PasswordEncoder passwordEncoder;
private static Container CONTAINER_BROKER;
private static final Container CONTAINER_SEARCH = Container.builder()
.name(SEARCH_NAME)
.internalName(SEARCH_NAME)
.build();
@BeforeAll
public static void beforeAll() throws InterruptedException {
......@@ -86,46 +90,47 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
.withEnableIpv6(false)
.exec();
/* create amqp */
final CreateContainerResponse broker = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG)
/* create elastic search */
final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-public"))
.withName(BROKER_NAME)
.withIpv4Address(BROKER_IP)
.withHostName(BROKER_HOSTNAME)
.withName(SEARCH_NAME)
.withIpv4Address(SEARCH_IP)
.withHostName(SEARCH_HOSTNAME)
.withHostConfig(new HostConfig()
.withPortBindings())
.withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN")
.exec();
CONTAINER_SEARCH.setHash(search.getId());
/* start elastic search */
startContainer(CONTAINER_SEARCH, 30);
}
/* create mariadb */
final CreateContainerResponse container1 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
.withEnv(IMAGE_1_ENV)
@Transactional
@BeforeEach
public void beforeEach() throws InterruptedException {
/* create fda-userdb-u01 */
final CreateContainerResponse response1 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
.withName(CONTAINER_1_NAME)
.withIpv4Address(CONTAINER_1_IP)
.withHostName(CONTAINER_1_INTERNALNAME)
.withEnv("MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb")
.exec();
final CreateContainerResponse container2 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
.withEnv(IMAGE_2_ENV)
.withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
.withName(CONTAINER_2_NAME)
.withIpv4Address(CONTAINER_2_IP)
.withHostName(CONTAINER_2_INTERNALNAME)
.exec();
/* start container */
CONTAINER_1.setHash(container1.getId());
CONTAINER_2.setHash(container2.getId());
CONTAINER_BROKER = Container.builder()
.hash(broker.getId())
.build();
CONTAINER_1.setHash(response1.getId());
/* start fda-userdb-u01 */
startContainer(CONTAINER_1);
/* metadata db */
licenseRepository.save(LICENSE_1);
containerRepository.save(CONTAINER_1);
USER_1.setPassword(passwordEncoder.encode(USER_1_PASSWORD));
userRepository.save(USER_1);
imageRepository.save(IMAGE_1);
}
@Transactional
@BeforeEach
public void beforeEach() {
imageRepository.save(IMAGE_1);
DATABASE_1.setContainer(CONTAINER_1);
DATABASE_2.setContainer(CONTAINER_2);
databaseRepository.save(DATABASE_1);
databaseRepository.save(DATABASE_2);
@AfterEach
public void afterEach() {
stopContainer(CONTAINER_1);
removeContainer(CONTAINER_1);
}
@AfterAll
......@@ -155,161 +160,46 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
});
}
// @Transactional
// @Test
// public void create_succeeds() throws ImageNotSupportedException, ContainerNotFoundException,
// DatabaseMalformedException, AmqpException, ContainerConnectionException, InterruptedException,
// UserNotFoundException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// final Database response = databaseService.create(CONTAINER_1_ID, request, principal);
// assertEquals(DATABASE_1_NAME, response.getName());
// assertEquals(DATABASE_1_PUBLIC, response.getIsPublic());
// assertEquals(CONTAINER_1_ID, response.getContainer().getId());
// }
//
// @Test
// public void create_notFound_fails() throws InterruptedException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// assertThrows(ContainerNotFoundException.class, () -> {
// databaseService.create(9999L, request, principal);
// });
// }
//
// @Test
// public void create_duplicate_fails() throws InterruptedException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// assertThrows(DatabaseMalformedException.class, () -> {
// databaseService.create(CONTAINER_1_ID, request, principal);
// });
// }
//
// @Test
// public void create_notRunning_fails() throws InterruptedException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.stopContainer(CONTAINER_1);
//
// /* test */
// assertThrows(ContainerConnectionException.class, () -> {
// databaseService.create(CONTAINER_1_ID, request, principal);
// });
// }
//
// @Test
// public void delete_succeeds() throws DatabaseNotFoundException, ImageNotSupportedException,
// DatabaseMalformedException, AmqpException, InterruptedException, ContainerConnectionException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_2);
//
// /* test */
// databaseService.delete(CONTAINER_2_ID, DATABASE_2_ID, principal);
// final Optional<Database> response = databaseRepository.findById(DATABASE_2_ID);
// assertTrue(response.isEmpty());
// }
//
// @Test
// public void delete_notFound_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, 9999L, principal);
// });
// }
//
// @Test
// public void delete_notRunning_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.stopContainer(CONTAINER_1);
//
// /* test */
// assertThrows(ContainerConnectionException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
// });
// }
//
// @Test
// public void modify_notFound_fails() {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, 9999L, principal);
// });
// }
//
// @Test
// public void find_succeeds() throws DatabaseNotFoundException, InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
// assertEquals(DATABASE_1_ID, response.getId());
// assertEquals(DATABASE_1_NAME, response.getName());
// assertEquals(DATABASE_1_PUBLIC, response.getIsPublic());
// }
//
// @Test
// public void find_notFound_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.findById(CONTAINER_1_ID, 9999L, principal);
// });
// }
@Test
public void create_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* test */
databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
}
@Test
public void update_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException,
LicenseNotFoundException, DatabaseNotFoundException {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
/* test */
databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE1);
}
@Test
public void update_license_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException,
LicenseNotFoundException, DatabaseNotFoundException {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
/* test */
databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE1);
databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE2);
log.trace("");
}
}
spring.profiles.active=test-noelastic
# disable discovery
spring.cloud.discovery.enabled = false
......
package at.tuwien.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
......@@ -130,6 +130,10 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
databaseRepository.deleteById(databaseId);
log.info("Deleted database with id {}", databaseId);
log.debug("deleted database {}", database);
// delete in database_index - elastic search
databaseidxRepository.delete(database);
log.info("Deleted database in elastic search with id {}", databaseId);
log.debug("deleted database in elastic search {}", database);
}
@Override
......@@ -158,9 +162,9 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
final PreparedStatement preparedStatement1 = databaseMapper.imageToRawGrantReadonlyAccessQuery(connection);
preparedStatement1.executeUpdate();
} catch (SQLException e) {
log.error("Failed to delete database");
log.debug("failed to delete database {}, reason: {}", database, e.getMessage());
throw new DatabaseMalformedException("Failed to execute and map time-versioned query", e);
log.error("Failed to create database");
log.debug("failed to create database {}, reason: {}", database, e.getMessage());
throw new DatabaseMalformedException("Failed to execute query", e);
} finally {
dataSource.close();
}
......@@ -170,12 +174,14 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
database.setIsPublic(createDto.getIsPublic());
final User creator = userService.findByUsername(principal.getName());
database.setCreator(creator);
final Database out = databaseRepository.save(database);
log.info("Created database with id {}", out.getId());
log.debug("created database {}", out);
final Database dbdb = databaseRepository.save(database);
log.info("Created database with id {}", dbdb.getId());
log.debug("created database {}", dbdb);
// save in database_index - elastic search
// databaseidxRepository.save(database);
return out;
final Database edb = databaseidxRepository.save(database);
log.info("Saved database in elastic search with id {}", edb.getId());
log.debug("saved database in elastic search {}", edb);
return dbdb;
}
@Override
......@@ -186,20 +192,27 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
if (modifyDto.getContactPerson() != null) {
database.setContact(userService.findByUsername(modifyDto.getContactPerson()));
}
if (modifyDto.getLicense() != null) {
final License license = licenseService.find(modifyDto.getLicense().getIdentifier());
log.info("Found license with identifier {}", modifyDto.getLicense().getIdentifier());
log.debug("found license {}", license);
database.setLicense(license);
}
database.setIsPublic(modifyDto.getIsPublic());
database.setDescription(modifyDto.getDescription());
database.setPublisher(modifyDto.getPublisher());
database.setPublication(modifyDto.getPublication());
database.setLanguage(databaseMapper.languageTypeDtoToLanguageType(modifyDto.getLanguage()));
database.setLicense(license);
final Database out = databaseRepository.save(database);
final Database dbdb = databaseRepository.save(database);
/* update entity in metadata database */
log.info("Updated database with id {}", out.getId());
log.debug("updated database {}", out);
log.info("Updated database with id {}", dbdb.getId());
log.debug("updated database {}", dbdb);
// save in database_index - elastic search
// databaseidxRepository.save(database);
return out;
final Database edb = databaseidxRepository.save(database);
log.info("Updated database in elastic search with id {}", edb.getId());
log.debug("updated database in elastic search {}", edb);
return dbdb;
}
}
......@@ -57,6 +57,7 @@ public class Container {
@Column
private Integer port;
@org.springframework.data.annotation.Transient
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
......
......@@ -72,6 +72,7 @@ public class ContainerImage {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "image")
private List<ContainerImageDate> dateFormats;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "image")
private List<Container> containers;
......
......@@ -34,6 +34,7 @@ public class ContainerImageDate {
@Column(name = "iid")
private Long iid;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "iid", insertable = false, updatable = false)
......
......@@ -10,8 +10,6 @@ import org.hibernate.annotations.Where;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
......@@ -33,7 +31,6 @@ import java.util.List;
})
public class Database {
@Field(type = FieldType.Integer)
@Id
@EqualsAndHashCode.Include
@GeneratedValue(generator = "database-sequence")
......@@ -44,14 +41,12 @@ public class Database {
)
private Long id;
@Field(index = false)
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "Creator", referencedColumnName = "UserID")
})
private User creator;
@Field(index = false)
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
......@@ -59,61 +54,49 @@ public class Database {
})
private Container container;
@Field(type = FieldType.Text)
@Column(nullable = false)
private String name;
@Field(index = false)
@ElementCollection
@CollectionTable(name = "mdb_databases_subjects", joinColumns = {
@JoinColumn(name = "dbid", referencedColumnName = "id")
})
private List<String> subjects;
@Field(type = FieldType.Text)
@Column(nullable = false)
private String internalName;
@Field(type = FieldType.Text)
@Column(nullable = false)
private String exchange;
@Field(type = FieldType.Text)
@Column
private String description;
@Field(type = FieldType.Text)
@Column
private String publisher;
@Field(type = FieldType.Text)
@Column
private String publication;
@Field(index = false)
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({
@JoinColumn(name = "contactperson", referencedColumnName = "UserID", insertable = false, updatable = false)
})
private User contact;
@Field(index = false)
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false)
})
private List<Table> tables;
@Field(type = FieldType.Boolean)
@Column(nullable = false)
private Boolean isPublic;
@Field(index = false)
@Column(columnDefinition = "enum('EN', 'DE', 'OTHER')")
@Enumerated(EnumType.STRING)
private LanguageType language;
@Field(index = false)
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "License", referencedColumnName = "identifier")
......
......@@ -66,6 +66,7 @@ public class Table {
@Column(name = "tdescription")
private String description;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "tdbid", insertable = false, updatable = false)
......
......@@ -60,6 +60,7 @@ public class TableColumn implements Comparable<TableColumn> {
@JoinColumn(name = "dfid", referencedColumnName = "id", insertable = false, updatable = false)
private ContainerImageDate dateFormat;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({
......
......@@ -27,6 +27,7 @@ public class Concept {
@Column(name = "name", nullable = false)
private String name;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinTable(name = "mdb_columns_concepts",
......
......@@ -45,6 +45,7 @@ public class Creator {
@Column
private String orcid;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false)
......
......@@ -42,6 +42,7 @@ public class Token {
@Column(nullable = false)
private Boolean processed;
@org.springframework.data.annotation.Transient
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
......
package at.tuwien.entities.user;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
......
......@@ -223,10 +223,16 @@ export default {
console.debug('user data', res.data)
this.user = res.data
} catch (err) {
const { status } = err.response
if (status === 401) {
console.error('Token expired', err)
this.logout()
} else {
console.error('user data', err)
this.$toast.error('Failed to load user')
this.error = true
}
}
this.loadingUser = false
},
setTheme () {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment