G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
96 lines
2.3 KiB
JavaScript
96 lines
2.3 KiB
JavaScript
/*------------------------------------------------------------------------------
|
|
* 1. 파일명: biz.js
|
|
* 2. 설 명: 일자를 포함한 기본자료형 외의 업무 자료형 및 업무로직을 처리하는
|
|
* 함수를 정의한다.
|
|
* 3. 의존성: string.js
|
|
* 4. 작성자:
|
|
* 5. 작성일: 2006.10.16.
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
/**
|
|
* 전화번호 값을 형식화한다.
|
|
*/
|
|
function formatTelNo(phoneNo) {
|
|
if ( isEmpty(phoneNo) ) return "";
|
|
|
|
var hasLocalNo = ( phoneNo.length >= 9 && phoneNo.length <= 11 );
|
|
|
|
var formattedNo = ""; // 형식화된 번호.
|
|
|
|
/* 지역번호가 유무에 따라 처리. */
|
|
if ( hasLocalNo ) {
|
|
/* 지역번호가 있을 때. */
|
|
|
|
/* 지역번호가 02인가? */
|
|
if ( phoneNo.indexOf("02") == 0 ) {
|
|
formattedNo = "02-"
|
|
+ ( phoneNo.length == 9
|
|
? phoneNo.substr(2, 3) : phoneNo.substr(2, 4) ) + "-"
|
|
+ phoneNo.substr(phoneNo.length - 4);
|
|
}
|
|
else {
|
|
formattedNo = phoneNo.substr(0, 3) + "-"
|
|
+ ( phoneNo.length == 10
|
|
? phoneNo.substr(3, 3) : phoneNo.substr(3, 4) ) + "-"
|
|
+ phoneNo.substr(phoneNo.length - 4);
|
|
}
|
|
}
|
|
else {
|
|
/* 지역번호가 없을 때. */
|
|
formattedNo = ( phoneNo.length == 7
|
|
? phoneNo.substr(0, 3) : phoneNo.substr(0, 4) ) + "-"
|
|
+ phoneNo.substr(phoneNo.length - 4);
|
|
}
|
|
|
|
return formattedNo;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 Object의 값을 전화번호로 가정하고 형식화한다.
|
|
*/
|
|
function formatTelNoObj(obj) {
|
|
obj.value = formatTelNo(obj.value);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 핸드폰 번호 값을 형식화한다.
|
|
* 넘어온 번호 값은 유효한 해드폰 번호임을 가정한다.
|
|
*/
|
|
function formatHpNo(phoneNo) {
|
|
/* 값이 없는 경우도 유효한 값이다. */
|
|
if ( isEmpty(phoneNo) ) return "";
|
|
|
|
/* 그래도 혹시 모르니 길이를 확인해 보자. */
|
|
var hpNo = removeChar(phoneNo, "-");
|
|
|
|
if ( hpNo.length != 10 && hpNo.length != 11 ) {
|
|
showSysMessage("hpNo의 값 [" + phoneNo + "]는 - 를 뺀 길이가 10이나 11이어야 합니다.");
|
|
return phoneNo;
|
|
}
|
|
|
|
/* 앞에서 3자리 지역번호. */
|
|
var formattedNo = hpNo.substr(0, 3) + "-";
|
|
|
|
/* 전체 길이가 10이면 3자리가 국번, 11이면 4자리가 국번. */
|
|
formattedNo += ( hpNo.length == 10 ? hpNo.substr(3, 3) : hpNo.substr(3, 4) ) + "-";
|
|
|
|
/* 나머지 4자리 번호. */
|
|
formattedNo += hpNo.substring(hpNo.length - 4);
|
|
|
|
|
|
return formattedNo;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 Object의 값을 핸드폰 번호로 가정하고 형식화한다.
|
|
*/
|
|
function formatHpNoObj(obj) {
|
|
obj.value = formatHpNo(obj.value);
|
|
}
|