Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 13 additions & 31 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,13 @@ on:
- main
- develop



jobs:
CI:
name: Continuous Integration
runs-on: ubuntu-latest
permissions:
contents: read

services:
mysql:
image: mysql:8.0
options: --network-alias=mysql
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: testPW
MYSQL_DATABASE: testDB
MYSQL_USER: test
MYSQL_PASSWORD: testPW


steps:
- name: Checkout with submodules
uses: actions/checkout@v4
Expand All @@ -49,21 +34,6 @@ jobs:
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Wait for MySQL to be ready
run: |
echo "Waiting for MySQL to start..."
for i in {1..30}; do
mysql -h 127.0.0.1 -u test -ptestPW -e "SELECT 1" && echo "MySQL is up!" && exit 0
sleep 2
done
echo "MySQL did not start in time!"
exit 1

- name: Verify MySQL Connection
run: |
echo "Checking MySQL connection..."
mysql -h 127.0.0.1 -u test -ptestPW -D testDB -e "SHOW TABLES;"

- name: Verify Backend_Config files
run: ls -al Backend_Config

Expand All @@ -72,4 +42,16 @@ jobs:
env:
SPRING_PROFILES_ACTIVE: test
run: |
./gradlew --no-daemon clean build test --info --stacktrace
echo "▶ Running Gradle build and test..."
./gradlew --no-daemon clean build test --info --stacktrace

- name: Show test results summary
if: success()
run: |
echo "All Spring Boot tests passed successfully!"

- name: Mark failure if tests failed
if: failure()
run: |
echo "Tests failed. Please check the test logs for detail"
exit 1
41 changes: 11 additions & 30 deletions .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ on:

env:
DOCKERHUB_REPOSITORY: ${{ secrets.DOCKER_REPOSITORY }}
SPRING_DATASOURCE_URL: ${{ secrets.SPRING_DATASOURCE_URL }}

jobs:
CI:
Expand All @@ -17,23 +16,11 @@ jobs:
permissions:
contents: read

services:
mysql:
image: mysql:8.0
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: testPW
MYSQL_DATABASE: testDB
MYSQL_USER: test
MYSQL_PASSWORD: testPW

steps:
- name: Get short SHA
id: slug
run: echo "sha7=$(echo ${GITHUB_SHA} | cut -c1-7)" >> $GITHUB_OUTPUT


- name: Checkout with submodules
uses: actions/checkout@v4
with:
Expand All @@ -50,32 +37,26 @@ jobs:
java-version: '17'
distribution: 'temurin'

- name: Wait for MySQL to be ready
run: |
echo "Waiting for MySQL to start..."
for i in {1..30}; do
mysql -h 127.0.0.1 -u test -ptestPW -e "SELECT 1" && echo "MySQL is up!" && exit 0
sleep 2
done
echo "MySQL did not start in time!"
exit 1

- name: Verify MySQL Connection
run: |
echo "Checking MySQL connection..."
mysql -h 127.0.0.1 -u test -ptestPW -D testDB -e "SHOW TABLES;"

- name: Verify Backend_Config files
run: ls -al Backend_Config

- name: Build and Test with Gradle Wrapper
env:
SPRING_PROFILES_ACTIVE: test
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3306/testDB?allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC

run: |
echo "▶ Running Gradle build and test..."
./gradlew --no-daemon clean build test --info --stacktrace

- name: Show test results summary
if: success()
run: echo "All Spring Boot tests passed successfully!"

- name: Mark failure if tests failed
if: failure()
run: |
echo "Tests failed. Please check the test report/logs for details."
exit 1

- name: Upload jar file to Artifact
uses: actions/upload-artifact@v4
with:
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,4 @@ out/
### VS Code ###
.vscode/
.DS_Store
docker-compose.yml
src/main/resources/*.properties
2 changes: 1 addition & 1 deletion Backend_Config
7 changes: 5 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ dependencies {
//webflux
implementation 'org.springframework.boot:spring-boot-starter-webflux'
//jpa
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// implementation 'mysql:mysql-connector-java:8.0.33'
// implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//neo4j
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'

}

tasks.named('test') {
Expand Down
23 changes: 23 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
version: '3.8'

services:
neo4j:
image: neo4j:5
container_name: neo4j-db
restart: always
ports:
- "7474:7474"
- "7687:7687"
environment:
NEO4J_AUTH: neo4j/testPass123
volumes:
- neo4j-data:/data
networks:
- backend-network

volumes:
neo4j-data:

networks:
backend-network:
driver: bridge
9 changes: 0 additions & 9 deletions init.sql

This file was deleted.

24 changes: 14 additions & 10 deletions src/main/java/com/going/server/domain/cluster/entity/Cluster.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
package com.going.server.domain.cluster.entity;

import com.going.server.global.common.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Node;
import org.springframework.data.neo4j.core.schema.Property;

@Entity

@Node("Cluster")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name="cluster")
public class Cluster extends BaseEntity {
public class Cluster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="cluster_id")
@GeneratedValue
private Long clusterId;

@Column(name="represent_word")
@Property("represent_word")
private String representWord;

@Column(name="result_img")
@Property("result_img")
private String resultImg;

public static Cluster toEntity(String representWord, String resultImg) {
return Cluster.builder().representWord(representWord).resultImg(resultImg).build();
return Cluster.builder()
.representWord(representWord)
.resultImg(resultImg)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@

import com.going.server.domain.cluster.entity.Cluster;
import com.going.server.domain.cluster.exception.ClusterNotFoundException;
import com.going.server.domain.word.exception.WordNotFoundException;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ClusterRepository extends JpaRepository<Cluster, Long> {
public interface ClusterRepository extends Neo4jRepository<Cluster, Long> {
Cluster findByRepresentWord(String word);

default Cluster getByCluster(Long ClusterId) {
return findById(ClusterId).orElseThrow(ClusterNotFoundException::new);
default Cluster getByCluster(Long clusterId) {
return findById(clusterId).orElseThrow(ClusterNotFoundException::new);
}
}
22 changes: 12 additions & 10 deletions src/main/java/com/going/server/domain/history/entity/History.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
package com.going.server.domain.history.entity;

import com.going.server.domain.word.entity.Word;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.neo4j.core.schema.*;

@Entity
@Node("History")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name="history")
public class History {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="history_id")
@GeneratedValue
private Long historyId;

@Column(name="`before`")
@Property("before")
private String before;

@Column(name="after")
@Property("after")
private String after;

@ManyToOne
@JoinColumn(name="word_id")
@Relationship(type = "RELATED_TO", direction = Relationship.Direction.OUTGOING)
private Word word;

public static History toEntity(String before, String after, Word word){
return History.builder().before(before).after(after).word(word).build();
return History.builder()
.before(before)
.after(after)
.word(word)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.going.server.domain.history.repository;

import com.going.server.domain.history.entity.History;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface HistoryRepository extends JpaRepository<History, Long> {
public interface HistoryRepository extends Neo4jRepository<History, Long> {
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.going.server.domain.sentence.controller;

import com.going.server.domain.sentence.service.SentenceService;
import com.going.server.domain.sentence.service.SentenceServiceImpl;
import com.going.server.global.response.SuccessResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/com/going/server/domain/sentence/entity/Sentence.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
package com.going.server.domain.sentence.entity;

import com.going.server.domain.word.entity.Word;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.neo4j.core.schema.*;

@Entity
@Node("Sentence")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name="sentence")
public class Sentence {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="sentence_id")
@GeneratedValue
private Long sentenceId;

@Column(name="sentence")
@Property("sentence")
private String sentence;

@ManyToOne
@JoinColumn(name="word_id")
// 문장은 단어를 사용한다.
@Relationship(type = "USES", direction = Relationship.Direction.OUTGOING)
private Word word;

public static Sentence toEntity(String sentence,Word word) {
return Sentence.builder().word(word).sentence(sentence).build();
public static Sentence toEntity(String sentence, Word word) {
return Sentence.builder()
.sentence(sentence)
.word(word)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package com.going.server.domain.sentence.repository;

import com.going.server.domain.sentence.entity.Sentence;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface SentenceRepository extends JpaRepository<Sentence, Long> {
public interface SentenceRepository extends Neo4jRepository<Sentence, Long> {
List<Sentence> findByWord_WordId(Long wordId);
}
Loading