From 13b920d9119071b9c2e5e7b74bd4a7a1014d0e23 Mon Sep 17 00:00:00 2001 From: kevin Date: Sat, 18 Apr 2026 18:25:51 -0400 Subject: [PATCH] Set initial database schema --- backend/build.gradle | 9 +++++-- backend/flake.nix | 1 + .../concord/backend/datamodels/Channel.java | 26 +++++++++++++++++++ .../concord/backend/datamodels/Message.java | 26 +++++++++++++++++++ .../concord/backend/datamodels/Server.java | 21 +++++++++++++++ .../backend/datamodels/UserProfile.java | 17 ++++++++++++ .../backend/datamodels/enums/ChannelType.java | 6 +++++ .../repositories/ChannelRepository.java | 9 +++++++ .../repositories/MessageRepository.java | 9 +++++++ .../repositories/ServerRepository.java | 9 +++++++ .../repositories/UserProfileRepository.java | 9 +++++++ .../src/main/resources/application.properties | 10 +++++++ 12 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/net/kpuig/concord/backend/datamodels/Channel.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/datamodels/Message.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/datamodels/Server.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/datamodels/UserProfile.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/datamodels/enums/ChannelType.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/repositories/ChannelRepository.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/repositories/MessageRepository.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/repositories/ServerRepository.java create mode 100644 backend/src/main/java/net/kpuig/concord/backend/repositories/UserProfileRepository.java diff --git a/backend/build.gradle b/backend/build.gradle index 3a8adea..1183c6c 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -1,12 +1,12 @@ plugins { id 'java' - id 'org.springframework.boot' version '4.0.2' + id 'org.springframework.boot' version '4.0.5' id 'io.spring.dependency-management' version '1.1.7' } group = 'net.kpuig.concord' version = '0.0.1-SNAPSHOT' -description = 'Demo project for Spring Boot' +description = 'Concord REST Server' java { toolchain { @@ -25,12 +25,17 @@ repositories { } dependencies { + implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-webmvc' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.3' implementation 'org.springframework.boot:spring-boot-starter-websocket' + //implementation 'org.springframework.boot:spring-boot-starter-security' + //implementation 'org.springframework.boot:spring-boot-starter-security-oauth2-resource-server' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.postgresql:postgresql' runtimeOnly 'com.h2database:h2:2.4.240' + implementation 'org.springframework.boot:spring-boot-h2console' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test' testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' diff --git a/backend/flake.nix b/backend/flake.nix index f7e9317..86a1407 100644 --- a/backend/flake.nix +++ b/backend/flake.nix @@ -12,6 +12,7 @@ buildInputs = with pkgs; [ jdk25 gradle + keycloak ]; shellHook = '' mkdir -p .vscode diff --git a/backend/src/main/java/net/kpuig/concord/backend/datamodels/Channel.java b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Channel.java new file mode 100644 index 0000000..0063f51 --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Channel.java @@ -0,0 +1,26 @@ +package net.kpuig.concord.backend.datamodels; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.Data; +import net.kpuig.concord.backend.datamodels.enums.ChannelType; + +@Data +@Entity(name = "channel") +public class Channel { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private Long position; + + private ChannelType type; + + private String name; + + @ManyToOne + private Server server; +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/datamodels/Message.java b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Message.java new file mode 100644 index 0000000..2512f7d --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Message.java @@ -0,0 +1,26 @@ +package net.kpuig.concord.backend.datamodels; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.Data; + +@Data +@Entity(name = "message") +public class Message { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String content; + + private Long timestamp; + + @ManyToOne + private UserProfile userProfile; + + @ManyToOne + private Channel channel; +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/datamodels/Server.java b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Server.java new file mode 100644 index 0000000..3d0a198 --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/datamodels/Server.java @@ -0,0 +1,21 @@ +package net.kpuig.concord.backend.datamodels; + +import java.net.URL; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Data; + +@Data +@Entity(name = "server") +public class Server { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + private URL image; +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/datamodels/UserProfile.java b/backend/src/main/java/net/kpuig/concord/backend/datamodels/UserProfile.java new file mode 100644 index 0000000..d2dfeb4 --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/datamodels/UserProfile.java @@ -0,0 +1,17 @@ +package net.kpuig.concord.backend.datamodels; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Data; + +@Data +@Entity(name = "user_profile") +public class UserProfile { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String username; +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/datamodels/enums/ChannelType.java b/backend/src/main/java/net/kpuig/concord/backend/datamodels/enums/ChannelType.java new file mode 100644 index 0000000..0ff7eaa --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/datamodels/enums/ChannelType.java @@ -0,0 +1,6 @@ +package net.kpuig.concord.backend.datamodels.enums; + +public enum ChannelType { + TEXT_CHANNEL, + VOICE_CHANNEL +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/repositories/ChannelRepository.java b/backend/src/main/java/net/kpuig/concord/backend/repositories/ChannelRepository.java new file mode 100644 index 0000000..d89da16 --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/repositories/ChannelRepository.java @@ -0,0 +1,9 @@ +package net.kpuig.concord.backend.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import net.kpuig.concord.backend.datamodels.Channel; + +public interface ChannelRepository extends JpaRepository { + +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/repositories/MessageRepository.java b/backend/src/main/java/net/kpuig/concord/backend/repositories/MessageRepository.java new file mode 100644 index 0000000..b9c222b --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/repositories/MessageRepository.java @@ -0,0 +1,9 @@ +package net.kpuig.concord.backend.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import net.kpuig.concord.backend.datamodels.Message; + +public interface MessageRepository extends JpaRepository { + +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/repositories/ServerRepository.java b/backend/src/main/java/net/kpuig/concord/backend/repositories/ServerRepository.java new file mode 100644 index 0000000..bc173d2 --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/repositories/ServerRepository.java @@ -0,0 +1,9 @@ +package net.kpuig.concord.backend.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import net.kpuig.concord.backend.datamodels.Server; + +public interface ServerRepository extends JpaRepository { + +} diff --git a/backend/src/main/java/net/kpuig/concord/backend/repositories/UserProfileRepository.java b/backend/src/main/java/net/kpuig/concord/backend/repositories/UserProfileRepository.java new file mode 100644 index 0000000..4dce26a --- /dev/null +++ b/backend/src/main/java/net/kpuig/concord/backend/repositories/UserProfileRepository.java @@ -0,0 +1,9 @@ +package net.kpuig.concord.backend.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import net.kpuig.concord.backend.datamodels.UserProfile; + +public interface UserProfileRepository extends JpaRepository { + +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 3ca17a4..1ed8fd4 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -1 +1,11 @@ spring.application.name=backend +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.hibernate.ddl-auto=update +logging.level.org.springframework=INFO +logging.level.com.example=DEBUG +server.port=8080 \ No newline at end of file