Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
46e422b
refactor: QuestionService 불필요 코드 정리
KJBig Apr 19, 2026
b9ab2fe
refactor: 질문 이미지 저장 로직 helper 분리
KJBig Apr 19, 2026
050267e
refactor: 질문 아이템 저장 로직 helper 분리
KJBig Apr 19, 2026
0352801
refactor: 질문 투표 로직 서비스 분리
KJBig Apr 20, 2026
66f30d9
refactor: 질문 신고 로직 서비스 분리
KJBig Apr 20, 2026
8bdc850
refactor: 질문 좋아요 로직 서비스 분리
KJBig Apr 20, 2026
e03cf29
refactor: 질문 응답 helper 이름 변경
KJBig Apr 20, 2026
b8e3dc0
refactor: 질문 응답 helper 로직 정리
KJBig Apr 20, 2026
2637b64
refactor: 질문 목록 응답 조립 helper 통합
KJBig Apr 20, 2026
80e296e
refactor: 대기 질문 조회 서비스 분리
KJBig Apr 20, 2026
ca36360
refactor: 질문 피드 조회 서비스 분리
KJBig Apr 20, 2026
a1cb2c8
refactor: 질문 랭킹 조회 서비스 분리
KJBig Apr 20, 2026
ac18484
refactor: Buy 질문 피드 조회 서비스 이관
KJBig Apr 20, 2026
87481bb
refactor: 질문 helper 역할 이름 정리
KJBig Apr 20, 2026
ca5fdf0
refactor: 질문 상세 응답 조립 책임 분리
KJBig Apr 20, 2026
8b135a5
ci: 배포 락 로그 추가
KJBig Apr 20, 2026
b9c3708
Merge pull request #330 from CELEBIT/feature/question-refact
KJBig Apr 20, 2026
60bfbe4
feat: 질문 상태 PENDING 추가
KJBig Apr 21, 2026
7249083
feat: 검수 작업 도메인 골격 추가
KJBig Apr 21, 2026
c2cce5d
feat: DB 기반 기능 플래그 도메인 추가
KJBig Apr 21, 2026
defe774
feat: 질문 검수 작업 생성 서비스 추가
KJBig Apr 21, 2026
2391149
feat: 질문 검수 작업 기능 플래그 연결 서비스 추가
KJBig Apr 21, 2026
4f1abf5
feat: 게시글 업로드 시 검수 작업 생성 흐름 연결
KJBig Apr 21, 2026
0e1ddde
feat: 기능 플래그 기반 질문 PENDING 저장 지원
KJBig Apr 21, 2026
95520bb
chore: Nullable 어노테이션 Jakarta로 통일
KJBig Apr 21, 2026
48126a0
Merge pull request #331 from CELEBIT/feature/clean-post
KJBig Apr 21, 2026
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
31 changes: 20 additions & 11 deletions .github/workflows/admin-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ on:
- 'env/**'
- '.env'

concurrency:
group: ${{ github.ref_name }}
cancel-in-progress: false

jobs:
admin-ci-cd:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -58,19 +54,32 @@ jobs:
flags: 'g'


- name: Deploy to Local Server
- name: Wait for deploy lock and deploy admin
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.LOCAL_SERVER_HOST }}
username: ${{ secrets.LOCAL_SERVER_USER }}
password: ${{ secrets.LOCAL_SERVER_SSH_PASSWORD }}
script: |
set -e
branchName=${{ github.ref_name }}
echo ${branchName}
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "chmod Clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "Process Clear"
lockFile="/tmp/sluv-${branchName}-deploy.lock"

(
echo "[deploy-lock] admin deploy is waiting for lock: ${lockFile}"
if ! flock -w 1800 200; then
echo "[deploy-lock] admin deploy failed to acquire lock after 1800 seconds"
exit 1
fi

echo "[deploy-lock] admin deploy acquired lock"
echo "[deploy] admin deploy started for branch: ${branchName}"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] chmod clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] admin deploy finished"
echo "[deploy-lock] admin deploy releasing lock"
) 200>${lockFile}

current-time:
needs: admin-ci-cd
Expand All @@ -96,4 +105,4 @@ jobs:
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
content: "Dev ${{ github.ref_name }} Admin-Module Deploy ${{ job.status }}"
content: "Dev ${{ github.ref_name }} Admin-Module Deploy ${{ job.status }}"
31 changes: 20 additions & 11 deletions .github/workflows/api-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ on:
- 'env/**'
- '.env'

concurrency:
group: ${{ github.ref_name }}
cancel-in-progress: false

jobs:
api-ci-cd:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -58,19 +54,32 @@ jobs:
flags: 'g'


- name: Deploy to Local Server
- name: Wait for deploy lock and deploy api
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.LOCAL_SERVER_HOST }}
username: ${{ secrets.LOCAL_SERVER_USER }}
password: ${{ secrets.LOCAL_SERVER_SSH_PASSWORD }}
script: |
set -e
branchName=${{ github.ref_name }}
echo ${branchName}
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "chmod Clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "Process Clear"
lockFile="/tmp/sluv-${branchName}-deploy.lock"

(
echo "[deploy-lock] api deploy is waiting for lock: ${lockFile}"
if ! flock -w 1800 200; then
echo "[deploy-lock] api deploy failed to acquire lock after 1800 seconds"
exit 1
fi

echo "[deploy-lock] api deploy acquired lock"
echo "[deploy] api deploy started for branch: ${branchName}"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] chmod clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] api deploy finished"
echo "[deploy-lock] api deploy releasing lock"
) 200>${lockFile}

current-time:
needs: api-ci-cd
Expand All @@ -96,4 +105,4 @@ jobs:
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
content: "Dev ${{ github.ref_name }} Api-Module Deploy ${{ job.status }}"
content: "Dev ${{ github.ref_name }} Api-Module Deploy ${{ job.status }}"
31 changes: 20 additions & 11 deletions .github/workflows/batch-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ on:
- 'env/**'
- '.env'

concurrency:
group: ${{ github.ref_name }}
cancel-in-progress: false

jobs:
batch-ci-cd:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -58,19 +54,32 @@ jobs:
flags: 'g'


- name: Deploy to Local Server
- name: Wait for deploy lock and deploy batch
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.LOCAL_SERVER_HOST }}
username: ${{ secrets.LOCAL_SERVER_USER }}
password: ${{ secrets.LOCAL_SERVER_SSH_PASSWORD }}
script: |
set -e
branchName=${{ github.ref_name }}
echo ${branchName}
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "chmod Clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "Process Clear"
lockFile="/tmp/sluv-${branchName}-deploy.lock"

(
echo "[deploy-lock] batch deploy is waiting for lock: ${lockFile}"
if ! flock -w 1800 200; then
echo "[deploy-lock] batch deploy failed to acquire lock after 1800 seconds"
exit 1
fi

echo "[deploy-lock] batch deploy acquired lock"
echo "[deploy] batch deploy started for branch: ${branchName}"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S chmod +x /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] chmod clear"
echo ${{ secrets.LOCAL_SERVER_SUDO_PASSWORD }} | sudo -S /home/sluv/${branchName}-server/${branchName}-deploy-script.sh
echo "[deploy] batch deploy finished"
echo "[deploy-lock] batch deploy releasing lock"
) 200>${lockFile}

current-time:
needs: batch-ci-cd
Expand All @@ -96,4 +105,4 @@ jobs:
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
content: "Dev ${{ github.ref_name }} Batch-Module Deploy ${{ job.status }}"
content: "Dev ${{ github.ref_name }} Batch-Module Deploy ${{ job.status }}"
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;

@Getter
@ToString
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;

@Getter
@NoArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.sluv.admin.brand.dto.BrandPageResponse;
import com.sluv.admin.brand.service.BrandService;
import lombok.RequiredArgsConstructor;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.sluv.admin.celeb.service.CelebCategoryService;
import com.sluv.admin.celeb.service.CelebService;
import lombok.RequiredArgsConstructor;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;
import org.springframework.web.bind.annotation.*;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;

@Getter
@NoArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import jakarta.annotation.Nullable;
import org.springframework.web.bind.annotation.*;

@RestController
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sluv.api.moderation.service;

import com.sluv.domain.featureflag.enums.FeatureFlagKey;
import com.sluv.domain.featureflag.service.FeatureFlagDomainService;
import com.sluv.domain.moderation.service.ModerationJobDomainService;
import com.sluv.domain.question.entity.Question;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class QuestionModerationService {

private final FeatureFlagDomainService featureFlagDomainService;
private final ModerationJobDomainService moderationJobDomainService;

public void createQuestionJobIfEnabled(Question question) {
if (!featureFlagDomainService.isEnabled(FeatureFlagKey.MODERATION_JOB_CREATION)) {
return;
}

moderationJobDomainService.createQuestionJobIfAbsent(question.getId(), question.getUser().getId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.sluv.api.moderation.service;

import com.sluv.domain.featureflag.enums.FeatureFlagKey;
import com.sluv.domain.featureflag.service.FeatureFlagDomainService;
import com.sluv.domain.question.enums.QuestionStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class QuestionModerationStatusService {

private final FeatureFlagDomainService featureFlagDomainService;

public QuestionStatus getInitialQuestionStatus() {
if (featureFlagDomainService.isEnabled(FeatureFlagKey.MODERATION_QUESTION_CREATE_PENDING)) {
return QuestionStatus.PENDING;
}

return QuestionStatus.ACTIVE;
}

public QuestionStatus getUpdateQuestionStatus() {
if (featureFlagDomainService.isEnabled(FeatureFlagKey.MODERATION_QUESTION_UPDATE_PENDING)) {
return QuestionStatus.PENDING;
}

return QuestionStatus.ACTIVE;
}
}
Loading
Loading