Skip to content

260123 : [BOJ 1451] 직사각형으로 나누기 #1106

260123 : [BOJ 1451] 직사각형으로 나누기

260123 : [BOJ 1451] 직사각형으로 나누기 #1106

Workflow file for this run

name: PR Emoji & Notion Update by Author
on:
pull_request:
types: [opened, edited, reopened]
jobs:
update-notion-checkbox:
runs-on: ubuntu-latest
steps:
- name: Check PR title and body, then update author-specific checkbox
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NOTION_API_KEY: ${{ secrets.NOTION_API_KEY }}
NOTION_DATABASE_ID: ${{ secrets.NOTION_DATABASE_ID }}
run: |
echo "🔍 시작: PR 제목과 본문 확인"
PR_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH")
PR_BODY=$(jq -r .pull_request.body "$GITHUB_EVENT_PATH")
PR_AUTHOR=$(jq -r .pull_request.user.login "$GITHUB_EVENT_PATH")
echo "📌 PR Title: $PR_TITLE"
echo "👤 작성자: $PR_AUTHOR"
# ✅ 및 ❌ 이모지 감지
HAS_CHECK=$(echo "$PR_BODY" | grep -q "✅" && echo "yes" || echo "no")
HAS_CROSS=$(echo "$PR_BODY" | grep -q "❌" && echo "yes" || echo "no")
if [[ "$HAS_CHECK" == "yes" && "$HAS_CROSS" == "yes" ]]; then
CHECKBOX_VALUE=false
echo "⚠️ 둘 다 포함 → false"
elif [[ "$HAS_CROSS" == "yes" ]]; then
CHECKBOX_VALUE=false
echo "❌ 포함 → false"
elif [[ "$HAS_CHECK" == "yes" ]]; then
CHECKBOX_VALUE=true
echo "✅ 포함 → true"
else
echo "⚠️ 이모지가 없어 스킵합니다."
exit 0
fi
# 작성자 → 체크박스 필드 매핑
case "$PR_AUTHOR" in
"Eunjin3395") FIELD_NAME="은진" ;;
"KII1ua") FIELD_NAME="성윤" ;;
"dlchdaud123") FIELD_NAME="총명" ;;
"sksn12") FIELD_NAME="영만" ;;
"3veryDay") FIELD_NAME="현서" ;;
"alirz-pixel") FIELD_NAME="문형" ;;
"esc10946") FIELD_NAME="호준" ;;
"pinkkj") FIELD_NAME="제희" ;;
"sunha20") FIELD_NAME="선하" ;;
*)
echo "❌ 알 수 없는 작성자: $PR_AUTHOR"
exit 1
;;
esac
echo "🧩 적용 대상 필드: $FIELD_NAME"
# PR 제목에서 BOJ 문제 번호 추출
PROBLEM_NO=$(echo "$PR_TITLE" | grep -oE '\[BOJ [0-9]+\]' | grep -oE '[0-9]+')
if [ -z "$PROBLEM_NO" ]; then
echo "❌ PR 제목에서 문제 번호를 찾을 수 없습니다."
exit 1
fi
echo "🔢 추출된 문제 번호: $PROBLEM_NO"
# Notion DB에서 문제 번호 필드 == 문제 번호인 페이지 검색
PAGE_ID=$(curl -s -X POST "https://api.notion.com/v1/databases/$NOTION_DATABASE_ID/query" \
-H "Authorization: Bearer $NOTION_API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
--data '{
"filter": {
"property": "문제 번호",
"title": {
"equals": "'"$PROBLEM_NO"'"
}
}
}' | jq -r '.results[0].id')
if [ "$PAGE_ID" = "null" ] || [ -z "$PAGE_ID" ]; then
echo "❌ Notion에서 문제 번호 $PROBLEM_NO에 해당하는 페이지를 찾을 수 없습니다."
exit 1
fi
echo "✅ 대상 Notion 페이지 ID 확인됨"
# 해당 체크박스와 제출 체크박스 모두 업데이트
SUBMIT_FIELD="제출$FIELD_NAME"
echo "📦 대상 제출 필드: $SUBMIT_FIELD"
JSON_BODY=$(cat <<EOF
{
"properties": {
"$FIELD_NAME": {
"checkbox": $CHECKBOX_VALUE
},
"$SUBMIT_FIELD": {
"checkbox": true
}
}
}
EOF
)
# 👁 JSON 본문 출력
echo "📤 Notion PATCH 요청 본문:"
echo "$JSON_BODY"
# 🔁 PATCH 요청 전송
curl -s -o /dev/null -w "%{http_code}" -X PATCH "https://api.notion.com/v1/pages/$PAGE_ID" \
-H "Authorization: Bearer $NOTION_API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
--data "$JSON_BODY"
echo "🎉 Notion 업데이트 완료!!: $FIELD_NAME → $CHECKBOX_VALUE"
echo "🎯 Lambda API 호출 시작"
curl -s -o lambda_response.json -w "%{http_code}" -X POST https://p7vk9p47d0.execute-api.ap-northeast-2.amazonaws.com/api/save \
-H "Content-Type: application/json" \
-d "{\"prAuthor\": \"$PR_AUTHOR\", \"problemId\": \"$PROBLEM_NO\"}"
echo "📬 Lambda 응답:"
cat lambda_response.json
echo "🎉 Lambda API 호출 완료!!: $PR_AUTHOR, $PROBLEM_NO"