diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..fcd416fa Binary files /dev/null and b/.DS_Store differ diff --git a/.github/.DS_Store b/.github/.DS_Store new file mode 100644 index 00000000..dd97657f Binary files /dev/null and b/.github/.DS_Store differ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..90e30d95 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,39 @@ +name: CI Pipeline for Jutalkpia + +on: + push: + branches: + - dev + pull_request: + branches: + - dev + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + steps: + # 1. 코드 체크아웃 + - name: Checkout code + uses: actions/checkout@v3 + + # 2. Java 17 환경 설정 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + + # 3. Gradle 빌드 + # 3.1. chat-service 빌드 + - name: Build chat-service + working-directory: src/backend/chat-service + run: ./gradlew clean build -x test + + # 4. Docker 이미지 빌드 및 푸시 + # 4.1. chat-service 이미지 빌드 및 푸시 + - name: Build and push Docker image for chat-service + working-directory: src/backend/chat-service + run: | + docker build -t mirlee/chat-service:latest . + docker push mirlee/chat-service:latest diff --git a/src/backend/chat-service/Dockerfile b/src/backend/chat-service/Dockerfile new file mode 100644 index 00000000..1655604d --- /dev/null +++ b/src/backend/chat-service/Dockerfile @@ -0,0 +1,16 @@ +# JDK 17 기반 이미지 사용 +FROM eclipse-temurin:17-jdk-jammy + +# 작업 디렉토리 설정 +WORKDIR /app + +# 빌드된 JAR 파일 복사 +ARG JAR_FILE=build/libs/chat-service-0.0.1-SNAPSHOT.jar +COPY ${JAR_FILE} app.jar + +# 포트 노출 +EXPOSE 8080 + +# 애플리케이션 실행 +ENTRYPOINT ["java", "-jar", "app.jar"] + diff --git a/src/backend/workspace_server/.gradle/8.11.1/checksums/checksums.lock b/src/backend/workspace_server/.gradle/8.11.1/checksums/checksums.lock new file mode 100644 index 00000000..9ddd5e98 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/checksums/checksums.lock differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/checksums/md5-checksums.bin b/src/backend/workspace_server/.gradle/8.11.1/checksums/md5-checksums.bin new file mode 100644 index 00000000..e710602e Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/checksums/md5-checksums.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/checksums/sha1-checksums.bin b/src/backend/workspace_server/.gradle/8.11.1/checksums/sha1-checksums.bin new file mode 100644 index 00000000..0e416ed0 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/checksums/sha1-checksums.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.bin b/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.bin new file mode 100644 index 00000000..c49b29f8 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.lock b/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.lock new file mode 100644 index 00000000..e8aba42a Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/executionHistory/executionHistory.lock differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/fileChanges/last-build.bin b/src/backend/workspace_server/.gradle/8.11.1/fileChanges/last-build.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/fileChanges/last-build.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.bin b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.bin new file mode 100644 index 00000000..5df3d2d8 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.lock b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.lock new file mode 100644 index 00000000..c5fba2d3 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/fileHashes.lock differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/fileHashes/resourceHashesCache.bin b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 00000000..4107fc08 Binary files /dev/null and b/src/backend/workspace_server/.gradle/8.11.1/fileHashes/resourceHashesCache.bin differ diff --git a/src/backend/workspace_server/.gradle/8.11.1/gc.properties b/src/backend/workspace_server/.gradle/8.11.1/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/src/backend/workspace_server/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/backend/workspace_server/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 00000000..a65ba310 Binary files /dev/null and b/src/backend/workspace_server/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/src/backend/workspace_server/.gradle/buildOutputCleanup/cache.properties b/src/backend/workspace_server/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 00000000..b98e8e56 --- /dev/null +++ b/src/backend/workspace_server/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Jan 21 14:25:20 KST 2025 +gradle.version=8.11.1 diff --git a/src/backend/workspace_server/.gradle/buildOutputCleanup/outputFiles.bin b/src/backend/workspace_server/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 00000000..b59812ef Binary files /dev/null and b/src/backend/workspace_server/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/src/backend/workspace_server/.gradle/file-system.probe b/src/backend/workspace_server/.gradle/file-system.probe new file mode 100644 index 00000000..9ba3323b Binary files /dev/null and b/src/backend/workspace_server/.gradle/file-system.probe differ diff --git a/src/backend/workspace_server/.gradle/vcs-1/gc.properties b/src/backend/workspace_server/.gradle/vcs-1/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/src/backend/workspace_server/.idea/.gitignore b/src/backend/workspace_server/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/src/backend/workspace_server/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/backend/workspace_server/.idea/codeStyles/codeStyleConfig.xml b/src/backend/workspace_server/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..54b41b07 --- /dev/null +++ b/src/backend/workspace_server/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/backend/workspace_server/.idea/compiler.xml b/src/backend/workspace_server/.idea/compiler.xml new file mode 100644 index 00000000..3d28a0cd --- /dev/null +++ b/src/backend/workspace_server/.idea/compiler.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/backend/workspace_server/.idea/gradle.xml b/src/backend/workspace_server/.idea/gradle.xml new file mode 100644 index 00000000..f9163b40 --- /dev/null +++ b/src/backend/workspace_server/.idea/gradle.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/src/backend/workspace_server/.idea/misc.xml b/src/backend/workspace_server/.idea/misc.xml new file mode 100644 index 00000000..6a8d183f --- /dev/null +++ b/src/backend/workspace_server/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/backend/workspace_server/.idea/vcs.xml b/src/backend/workspace_server/.idea/vcs.xml new file mode 100644 index 00000000..c2365ab1 --- /dev/null +++ b/src/backend/workspace_server/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/backend/workspace_server/HELP.md b/src/backend/workspace_server/HELP.md new file mode 100644 index 00000000..e78af1f6 --- /dev/null +++ b/src/backend/workspace_server/HELP.md @@ -0,0 +1,24 @@ +# Getting Started + +### Reference Documentation + +For further reference, please consider the following sections: + +* [Official Gradle documentation](https://docs.gradle.org) +* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/3.3.7/gradle-plugin) +* [Create an OCI image](https://docs.spring.io/spring-boot/3.3.7/gradle-plugin/packaging-oci-image.html) +* [Spring Data MongoDB](https://docs.spring.io/spring-boot/3.3.7/reference/data/nosql.html#data.nosql.mongodb) +* [Spring for Apache Kafka](https://docs.spring.io/spring-boot/3.3.7/reference/messaging/kafka.html) + +### Guides + +The following guides illustrate how to use some features concretely: + +* [Accessing Data with MongoDB](https://spring.io/guides/gs/accessing-data-mongodb/) + +### Additional Links + +These additional references should also help you: + +* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) + diff --git a/src/backend/workspace_server/build/reports/problems/problems-report.html b/src/backend/workspace_server/build/reports/problems/problems-report.html new file mode 100644 index 00000000..dfe29d57 --- /dev/null +++ b/src/backend/workspace_server/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/src/infra/.DS_Store b/src/infra/.DS_Store new file mode 100644 index 00000000..a34c8055 Binary files /dev/null and b/src/infra/.DS_Store differ diff --git a/src/infra/.gitignore b/src/infra/.gitignore new file mode 100644 index 00000000..33528daa --- /dev/null +++ b/src/infra/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +local.env +/.idea +/.idea/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/infra/Dockerfile b/src/infra/Dockerfile new file mode 100644 index 00000000..724eeb5e --- /dev/null +++ b/src/infra/Dockerfile @@ -0,0 +1,9 @@ +# PostgreSQL 15 이미지 기반 +FROM postgres:15 + +# 초기화 스크립트 복사 +ARG CACHE_BUST=3 +COPY init.sql /docker-entrypoint-initdb.d/ + +# 포트 노출 +EXPOSE 5432 diff --git a/src/infra/docker-compose.yml b/src/infra/docker-compose.yml new file mode 100644 index 00000000..8cf6af59 --- /dev/null +++ b/src/infra/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.8' + +services: + db: + image: mirlee/postgresql-db:latest # 직접 빌드한 이미지 사용 + container_name: jootalkpia-db + environment: + POSTGRES_USER: ${DB_USER} # PostgreSQL 사용자 + POSTGRES_PASSWORD: ${DB_PASSWORD} # PostgreSQL 비밀번호 + POSTGRES_DB: ${DB_NAME} # 공통 데이터베이스 이름 + volumes: + - postgres_data:/var/lib/postgresql/data # 데이터 저장 볼륨 + ports: + - "5432:5432" # 로컬 포트 5432 -> 컨테이너 포트 5432 + +volumes: + postgres_data: diff --git a/src/infra/init.sql b/src/infra/init.sql new file mode 100644 index 00000000..212e4d3b --- /dev/null +++ b/src/infra/init.sql @@ -0,0 +1,75 @@ +-- Users 테이블 생성 +CREATE TABLE IF NOT EXISTS users ( + user_id SERIAL PRIMARY KEY, + platform VARCHAR(50) NOT NULL, + social_id VARCHAR(50) NOT NULL UNIQUE, + nickname VARCHAR(100) NOT NULL, + email VARCHAR(320) NOT NULL UNIQUE, + profile_image VARCHAR(100) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL + ); + +-- WorkSpace 테이블 생성 +CREATE TABLE IF NOT EXISTS work_space ( + workspace_id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + stock_name VARCHAR(100) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + +-- Channel 테이블 생성 +CREATE TABLE IF NOT EXISTS channels ( + channel_id SERIAL PRIMARY KEY, + workspace_id BIGINT NOT NULL REFERENCES work_space(workspace_id) ON DELETE CASCADE, + name VARCHAR(100) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + +-- UserChannel 테이블 생성 +CREATE TABLE IF NOT EXISTS user_channel ( + user_channel_id SERIAL PRIMARY KEY, + user_id BIGINT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + channel_id BIGINT NOT NULL REFERENCES channels(channel_id) ON DELETE CASCADE, + mute BOOLEAN NOT NULL DEFAULT FALSE, + last_read_ts TIMESTAMP, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + +-- Mention 테이블 생성 +CREATE TABLE IF NOT EXISTS mention ( + mention_id SERIAL PRIMARY KEY, + user_channel_id BIGINT NOT NULL REFERENCES user_channel(user_channel_id) ON DELETE CASCADE, + message_id BIGINT NOT NULL, + is_unread BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + +CREATE TABLE IF NOT EXISTS files ( + file_id SERIAL PRIMARY KEY, + url VARCHAR(200) NOT NULL, + url_thumbnail VARCHAR(200), + file_type VARCHAR(50) NOT NULL, + file_size BIGINT NOT NULL, + mime_type VARCHAR(50) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- 초기 데이터 삽입 +-- WorkSpace 데이터 +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM work_space) THEN + INSERT INTO work_space (name, stock_name) VALUES + ('삼성전자 워크스페이스', '삼성전자'), + ('SK 하이닉스 워크스페이스', 'SK 하이닉스'), + ('카카오 워크스페이스', '카카오'), + ('네이버 워크스페이스', '네이버'), + ('한화에어로스페이스 워크스페이스', '한화에어로스페이스'); + END IF; +END $$; diff --git a/src/infra/local.env b/src/infra/local.env new file mode 100644 index 00000000..900546b8 --- /dev/null +++ b/src/infra/local.env @@ -0,0 +1,6 @@ +# PostgreSQL +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=jootalkpia +DB_USER=admin +DB_PASSWORD=1234 \ No newline at end of file