Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PC-268] Greedy 매칭 알고리즘 구현 #29

Merged
merged 52 commits into from
Jan 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
f3f6a8f
[PC-333] fix: 테스트 결과가 루트 빌드 디렉토리에 모이도록 수정
devchlee12 Jan 15, 2025
91fcc33
[PC-333] fix: 깨지는 테스트 수정
devchlee12 Jan 15, 2025
6bbc618
[PC-333] feat: pr 올릴 때 테스트 결과 뜨도록 설정
devchlee12 Jan 15, 2025
2f8fd1c
[PC-333] feat: 도커 CI CD 스크립트 작성
devchlee12 Jan 15, 2025
b43f13f
[PC-333] feat: 도커 파일 작성
devchlee12 Jan 15, 2025
05db9f9
[PC-333] fix: 통합 테스트를 위한 깃허브 액션 Runner MySQL 설정
devchlee12 Jan 15, 2025
6a63c5b
[PC-333] fix: Runner에서 MySQL 접속 가능하도록 설정
devchlee12 Jan 15, 2025
0ace785
[PC-333] feat: 도커 컴포즈 도커 네트워크 설정 추가
devchlee12 Jan 20, 2025
56a3949
[PC-333] feat: 어드민 서버 도커 파일 추가
devchlee12 Jan 20, 2025
757fb44
[PC-333] fix: init.sql 프로필 변경 사항 반영
devchlee12 Jan 20, 2025
f357900
[PC-333] fix: 통합 테스트 일시 제거
devchlee12 Jan 20, 2025
f46a2b3
[PC-268] feat: 지인 기반 차단기 구현
devchlee12 Jan 20, 2025
b9ae174
[PC-268] feat: 차단 여부 조회 쿼리 추가
devchlee12 Jan 20, 2025
32224c2
[PC-268] feat: 차단 여부 확인 메서드 추가
devchlee12 Jan 20, 2025
040b2f0
[PC-268] feat: Greedy 매칭 알고리즘 구현
devchlee12 Jan 20, 2025
ccd3e2c
[PC-268] feat: 매칭 정보 생성 정적 팩토리 메서드 추가
devchlee12 Jan 20, 2025
02f1caf
[PC-268] feat: 이전 매칭 여부 검사 쿼리 추가
devchlee12 Jan 20, 2025
01025c7
[PC-268] feat: 매칭 알고리즘 인터페이스 추가
devchlee12 Jan 20, 2025
a995ad1
[PC-268] fix: 매칭 스케줄러 시간 수정
devchlee12 Jan 20, 2025
760f59e
[PC-268] fix: 매칭 내역 저장, 유저 매치 확인 메서드 추가
devchlee12 Jan 20, 2025
29f565d
[PC-268] fix: Matcher가 인터페이스를 의존하도록 변경
devchlee12 Jan 20, 2025
879dab6
[PC-268] delete: 안정 매칭 구현 완성 전까지 해당 알고리즘 제거
devchlee12 Jan 20, 2025
2bedc63
[PC-268] feat: 이전 매칭 기반 차단기 구현
devchlee12 Jan 20, 2025
57cd332
[PC-270] feat: 매치 상태 ENUM 추가
devchlee12 Jan 21, 2025
1c8b517
[PC-270] feat: 가치관 픽 개체 Response 추가
devchlee12 Jan 21, 2025
a3a2978
[PC-270] feat: 가치관 픽 모음 조회 Response 추가
devchlee12 Jan 21, 2025
1110bfd
[PC-270] feat: 가치관 톡 개체 조회 Response 추가
devchlee12 Jan 21, 2025
92a3759
[PC-270] feat: 가치관 톡 모음 조회 Response 추가
devchlee12 Jan 21, 2025
8157d74
[PC-270] feat: 프로필 사진 Response 추가
devchlee12 Jan 21, 2025
4a35f24
[PC-270] feat: 매칭 정보 Response 추가
devchlee12 Jan 21, 2025
d321a3f
[PC-270] feat: 매칭 기본 프로필 조회 Response 추가
devchlee12 Jan 21, 2025
252150c
[PC-270] feat: 매칭 정보 조회 관련 로직 구현
devchlee12 Jan 21, 2025
48b715c
[PC-270] feat: 매칭 정보 확인 체크 메서드 추가
devchlee12 Jan 21, 2025
0ae130d
[PC-270] feat: 매칭 정보 조회 관련 API 엔드포인트들 추가
devchlee12 Jan 21, 2025
018e24e
[PC-271] feat: 매칭 수락 API 엔드포인트 추가
devchlee12 Jan 21, 2025
cc75ffb
[PC-271] feat: 매치 정보 엔티티 수락 메서드 추가
devchlee12 Jan 21, 2025
77ea7a0
[PC-271] feat: 매치 수락 기능 구현
devchlee12 Jan 21, 2025
ea94216
[PC-271] feat: 연락처 응답 객체 추가
devchlee12 Jan 21, 2025
1437ef1
[PC-271] fix: 연락처 응답 객체 수정
devchlee12 Jan 21, 2025
5abc497
[PC-271] fix: 연락처 응답 객체 수정
devchlee12 Jan 21, 2025
227b711
[PC-271] fix: 매칭 상대 연락처 조회 엔드포인트 추가
devchlee12 Jan 21, 2025
b44f0f7
[PC-271] fix: 매칭 수락 안됨 에러코드 추가
devchlee12 Jan 21, 2025
d69c3b1
[PC-271] feat: 매칭 상대 연락처 조회 API 엔드포인트 추가
devchlee12 Jan 21, 2025
fecc6bb
[PC-273] feat: 매칭 상대 차단 API 엔드포인트 추가
devchlee12 Jan 21, 2025
fde7c23
[PC-273] feat: 유저 직접 차단 및 차단 확인 기능 구현
devchlee12 Jan 21, 2025
18539e7
[PC-273] feat: 직접 차단 엔티티 추가
devchlee12 Jan 21, 2025
257bbd3
[PC-273] feat: 직접 차단 리포지토리 추가
devchlee12 Jan 21, 2025
e0ca328
[PC-273] feat: 유저 직접 차단기 구현
devchlee12 Jan 21, 2025
d36f2a4
Merge pull request #32 from YAPP-Github/feature/PC-273-match-blocking
devchlee12 Jan 25, 2025
02eebfb
Merge pull request #31 from YAPP-Github/feature/PC-271-accept-matching
devchlee12 Jan 25, 2025
7d47f64
Merge pull request #30 from YAPP-Github/feature/PC-270-get-matching-p…
devchlee12 Jan 25, 2025
b2017f9
Merge remote-tracking branch 'origin/develope' into feature/PC-268-ma…
devchlee12 Jan 25, 2025
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
70 changes: 70 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: CI/CD using github actions & docker

on:
push:
branches: [ "main", "develope" ]

permissions:
contents: read

jobs:
CI-CD:
runs-on: ubuntu-latest
steps:

- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

# secret yml 파일 생성
- name: make application-secret.yml
if: |
contains(github.ref, 'main') ||
contains(github.ref, 'develope')
run: |
cd ./api/src/main/resources
touch ./application-secret.yml
echo "${{ secrets.YML }}" > ./application-secret.yml
shell: bash

# gradle build
- name: Build with Gradle
run: ./gradlew build -x test

# docker build & push to develop
- name: Docker build & push to dev
if: contains(github.ref, 'develope')
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-dev -t ${{ secrets.DOCKER_USERNAME }}/docker-test-dev .
docker push ${{ secrets.DOCKER_USERNAME }}/docker-test-dev

## deploy to develop
- name: Deploy to dev
uses: appleboy/ssh-action@master
id: deploy-dev
if: contains(github.ref, 'develope')
with:
host: ${{ secrets.HOST_DEV }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: 22
key: ${{ secrets.PRIVATE_KEY }}
script: |
sudo docker ps
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker run -d -p 8080:8080 --add-host=localhost:host-gateway ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker image prune -f
45 changes: 45 additions & 0 deletions .github/workflows/pr-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: PR Test

on:
pull_request:
branches: [ "develope" ]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17

- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Test with Gradle
run: ./gradlew --info test

- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
if: ${{ always() }}
with:
files: build/reports/test-results/**/*.xml

- name: Cleanup Gradle Cache
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
7 changes: 7 additions & 0 deletions Dockerfile-admin
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM eclipse-temurin:17-jdk

ARG JAR_FILE=admin/build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]
7 changes: 7 additions & 0 deletions Dockerfile-dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM eclipse-temurin:17-jdk

ARG JAR_FILE=api/build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.yapp.domain.block.application;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yapp.domain.block.Block;
Expand All @@ -13,37 +12,37 @@
import java.util.Set;
import java.util.stream.Collectors;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class BlockService {
private final BlockRepository blockRepository;

@Transactional()
public void blockPhoneNumbers(BlockCreateDto blockCreateDto) {
Long userId = blockCreateDto.userId();
List<String> phoneNumbers = blockCreateDto.phoneNumbers();
List<Block> newBlocks = new ArrayList<>();

Set<String> blockedPhoneNumbers = blockRepository.findBlocksByUserId(userId)
.stream()
.map(Block::getPhoneNumber)
.collect(Collectors.toSet());

phoneNumbers.stream()
.filter(phoneNumber -> !blockedPhoneNumbers.contains(phoneNumber))
.forEach(phoneNumber -> {
Block block = Block.builder()
.user(User.builder().id(userId).build())
.phoneNumber(phoneNumber)
.build();
newBlocks.add(block);
});

blockRepository.saveAll(newBlocks);
}

@Transactional(readOnly = false)
public List<Block> findBlocksByUserId(Long userId) {
return blockRepository.findBlocksByUserId(userId);
}
private final BlockRepository blockRepository;

@Transactional()
public void blockPhoneNumbers(BlockCreateDto blockCreateDto) {
Long userId = blockCreateDto.userId();
List<String> phoneNumbers = blockCreateDto.phoneNumbers();
List<Block> newBlocks = new ArrayList<>();

Set<String> blockedPhoneNumbers =
blockRepository.findBlocksByUserId(userId).stream().map(Block::getPhoneNumber).collect(Collectors.toSet());

phoneNumbers.stream().filter(phoneNumber -> !blockedPhoneNumbers.contains(phoneNumber)).forEach(phoneNumber -> {
Block block = Block.builder().user(User.builder().id(userId).build()).phoneNumber(phoneNumber).build();
newBlocks.add(block);
});

blockRepository.saveAll(newBlocks);
}

@Transactional(readOnly = true)
public Boolean checkIfUserBlockedPhoneNumber(Long userId, String phoneNumber) {
return blockRepository.existsByUserIdAndPhoneNumber(userId, phoneNumber);
}

@Transactional(readOnly = false)
public List<Block> findBlocksByUserId(Long userId) {
return blockRepository.findBlocksByUserId(userId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.yapp.domain.block.application;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.yapp.application.AuthenticationService;
import org.yapp.domain.block.DirectBlock;
import org.yapp.domain.block.dao.DirectBlockRepository;

@Service
@RequiredArgsConstructor
public class DirectBlockService {

private final DirectBlockRepository directBlockRepository;
private final AuthenticationService authenticationService;

public DirectBlock blockUser(Long blockId) {
Long userId = authenticationService.getUserId();
return directBlockRepository.save(new DirectBlock(userId, blockId));
}

public boolean checkBlock(Long userId, Long partnerId) {
return directBlockRepository.existsDirectBlockByBlockingUserIdAndBlockedUserId(userId,
partnerId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@

@Repository
public interface BlockRepository extends JpaRepository<Block, Long> {
List<Block> findBlocksByUserId(Long userId);
boolean existsByUserIdAndPhoneNumber(Long userId, String phoneNumber);

List<Block> findBlocksByUserId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.yapp.domain.block.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.yapp.domain.block.DirectBlock;

public interface DirectBlockRepository extends JpaRepository<DirectBlock, Long> {

boolean existsDirectBlockByBlockingUserIdAndBlockedUserId(Long blockingUserId,
Long blockedUserId);
}
Loading
Loading