Phase 0: wbx-spring-core 라이브러리 전환 - java-library 플러그인, WbxAutoConfiguration, Admin 조건부 활성화 - 루트 settings.gradle + build.gradle (멀티모듈) Phase 1: wtm-api 모듈 생성 - 23개 JPA Entity, 14개 Controller, 79개 API 엔드포인트 - Flyway V100~V107 MySQL 마이그레이션 - TimesheetRuleEngine, TimesheetApprovalHandler, P6WbsParser Phase 2: wtm-frontend (Vue 3 + PrimeVue 4) - 10개 도메인 모듈, 17개 View, 5개 서브컴포넌트 - 반응형 레이아웃 (AppLayout, AppSidebar, AppTopbar) - BaseCrudTable, BaseFormDialog, BasePageHeader 표준 컴포넌트 - JWT 인터셉터, 역할 기반 메뉴 필터링 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52 줄
1.3 KiB
Bash
52 줄
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
# ============================================================
|
|
# Gitea 사용자 일괄 등록
|
|
# 사용법: ./scripts/gitea-bulk-create.sh users.csv
|
|
#
|
|
# CSV 형식 (헤더 없이):
|
|
# username,email,password
|
|
# hong,hong@company.com,P@ssw0rd123
|
|
# kim,kim@company.com,P@ssw0rd123
|
|
# ============================================================
|
|
set -euo pipefail
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "사용법: $0 <users.csv>"
|
|
echo ""
|
|
echo "CSV 형식:"
|
|
echo " username,email,password"
|
|
echo " hong,hong@company.com,P@ssw0rd123"
|
|
exit 1
|
|
fi
|
|
|
|
CSV_FILE="$1"
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
if [ ! -f "$CSV_FILE" ]; then
|
|
echo "파일을 찾을 수 없습니다: $CSV_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
COUNT=0
|
|
FAIL=0
|
|
|
|
while IFS=',' read -r username email password; do
|
|
# 빈 줄, 주석 건너뜀
|
|
[[ -z "$username" || "$username" =~ ^# ]] && continue
|
|
|
|
# 공백 제거
|
|
username=$(echo "$username" | xargs)
|
|
email=$(echo "$email" | xargs)
|
|
password=$(echo "$password" | xargs)
|
|
|
|
echo "--- ${username} (${email}) ---"
|
|
if "${SCRIPT_DIR}/gitea-create-user.sh" "$username" "$email" "$password"; then
|
|
COUNT=$((COUNT + 1))
|
|
else
|
|
FAIL=$((FAIL + 1))
|
|
fi
|
|
done < "$CSV_FILE"
|
|
|
|
echo ""
|
|
echo "완료: 성공 ${COUNT}건, 실패 ${FAIL}건"
|