Commit Graph

87 Commits

Author SHA1 Message Date
king 9c58b022e2 feat(expense): 개인경비 모듈 + ERP 좌측메뉴 셸 + expense_db 연결
- ERP 셸: 좌측 사이드바 + 상단 헤더 + 콘텐츠 영역(erp_base.html)
- 분기: 슈퍼관리자 → 업무모듈 카드, 일반사용자 → ERP 메인(erp_home.html)
- 신규 라우트: /modules (슈퍼관리자 모듈 카드 재진입)
- 개인경비 모듈: app/modules/expense/ (라우터/저장소/템플릿)
  - JSON 저장소(ExpenseStore) + PostgreSQL 저장소(ExpenseDBStore)
  - 팩토리: EXPENSE_DB_URL 있으면 DB, 없으면 JSON 폴백
- DB: scripts/sql/expense_db_init.sql (멱등 DDL, postgres-db 컨테이너)
  - expense_db, 역할 expense_app, 테이블 expense_items, 인덱스/트리거
- 마이그레이션: scripts/migrate_expense_json_to_db.py (멱등, --dry-run)
- 의존성: psycopg[binary,pool]>=3.2
- 환경변수: EXPENSE_DB_URL 추가
- 문서: CLAUDE.md 작업 기준 + docs/{PROJECT_OVERVIEW,SERVER_ARCHITECTURE,DATABASES,DEPLOYMENT}.md
  - main-app 배포 경로 /opt/www/main 고정 명시
  - 위험 명령(DROP/TRUNCATE/rm -rf/volume 삭제) 사용자 승인 정책
2026-05-29 02:21:03 +09:00
king d7b6c7d029 chore: add DESIGN.md, brand logo, caveman code rules
- DESIGN.md: 모노크롬 블루프린트 UI 스타일 레퍼런스
- app/static/[Originals]/dbx-logo.png: 브랜드 로고 원본
- skills/code.rules.md: 코드 작성 규칙
2026-05-29 02:20:40 +09:00
king 316e3fe8d1 feat(erp): ERP 대시보드 + 관리자 권한 시스템 도입
- 로그인: dbxcorp.co.kr 도메인 화이트리스트만 사용. ALLOWED_EMAILS 게이트 제거
- king@dbxcorp.co.kr 슈퍼관리자 자동 부여 (강등/삭제 불가)
- 신규 로그인 사용자는 JSON 저장소에 자동 등록 (기본 모듈 권한 0)
- 관리자 페이지(/admin): 역할/모듈별 토글로 직원 권한 수정
- 메인 대시보드를 ERP 시스템(monochromatic shadcn)으로 재설계
  · 모듈: CORM, Order, 개인경비(준비중), 휴가(준비중)
  · 권한 없는 모듈은 '권한 없음' 배지 + 클릭 불가
- DESIGN.md 토큰 기반 styles → app/static/erp.css
- docker-compose: dbx-main-data 볼륨 마운트 (DATA_DIR=/data)
  으로 권한 JSON 영구 보관

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 23:36:51 +09:00
king 64c77b36ea Merge branch 'claude/great-wiles-945b3f': brand-divider 애니메이션 10px→50%→10px 24s 주기로 변경 2026-05-27 02:00:33 +09:00
king 927990c002 style(ui): brand-divider 애니메이션 10px→50%→10px 24s 주기로 변경
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-27 02:00:26 +09:00
king 9cf889d824 Merge branch 'claude/great-wiles-945b3f': brand-divider 애니메이션 속도 10s로 조정 2026-05-27 01:58:27 +09:00
king dcecc1476e style(ui): brand-divider 애니메이션 속도 10s로 조정
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-27 01:58:24 +09:00
king 36c43012d9 Merge branch 'claude/great-wiles-945b3f': 로그인 brand-divider 호흡 애니메이션 추가 2026-05-27 01:51:14 +09:00
king 9a8dace7ec feat(ui): 로그인 페이지 brand-divider 호흡 애니메이션 추가
5초 주기 ease-in-out으로 48px → 100% → 48px 너비가 반복되는
divider-breathe 키프레임 애니메이션을 적용.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-27 01:43:51 +09:00
king c16bc905ed feat(ui): 메인 포털 홈 화면 카드명 수정 및 로그인/메인 화면 로고/헤더 레이아웃 스타일 개선
- 메인 홈 화면 카드 수정: 'CS 발주 업무' -> 'CS, 발주, 반품, 코드관리' (설명 문구도 이에 맞춤) / '고객 주문리스트 프로그램' -> '고객 주문 데이터베이스' (설명 문구도 이에 맞춤)

- 디자인 레이아웃 스타일 개선: 로그인 화면의 좌측 상단 로고 이미지를 원본 이미지 크기로 정상 출력되도록 수정 (styles.css 내 brand-logo-img 수정) / 메인 대시보드 상단 헤더 높이를 기존 110px에서 55px로 단축하여 공간 효율화 / 메인 대시보드 내 로고 높이를 55px로 고정하고 가로 비율이 유지되도록 수정 / 로고 옆의 '업무 포털' 브랜드 텍스트 폰트 크기를 24px로 확대 및 볼드 처리하여 시인성 극대화
2026-05-25 21:12:49 +09:00
king 98ac452e7d feat(menu): CS 발주 업무 카드를 /corm/ 으로 연결
- 메뉴 카드 url 기본값을 /corm/ 로 (NPM 리버스 프록시 하위 경로)
- 헬스 배지가 가리킬 health_url 을 /corm/health/db 로 설정
- .env.example 의 CS_ORDER_URL 안내를 /corm/ 로 정리
2026-05-24 15:41:01 +09:00
king 844c796578 feat(sso): user_picture를 세션 top-level에 저장 — OMS 도 아바타 표시 가능
기존엔 'user' dict 안에만 picture 가 저장돼 OMS 가 못 읽었다.
이제 user_email/user_name 처럼 top-level 키로도 저장하여 OMS 가 동일하게 읽는다.
get_user() 도 top-level user_picture 를 인정.
2026-05-24 14:18:46 +09:00
king 7ddc765326 feat(sso): SESSION_SECRET_KEY 미설정 시 fail-fast + ALLOWED_EMAILS env화
- SESSION_SECRET_KEY 가 .env 에 없으면 컨테이너 기동 단계에서 RuntimeError.
  알려진 기본값(change-this-session-secret) 폴백 제거로
  운영 .env 누락 시 양쪽 secret 불일치로 SSO 가 조용히 깨지는 사고 방지.
- ALLOWED_EMAILS 를 환경변수(쉼표 구분)로 덮어쓸 수 있게 변경.
  env 미설정 시 기존 4명 기본 목록 유지 → 운영 호환.
- .env.example 갱신: SESSION_SECRET_KEY 안내 강화, ALLOWED_EMAILS 항목 추가.
2026-05-24 13:25:06 +09:00
king c274e50ee0 feat(sso): SESSION_MAX_AGE를 env로 노출 — OMS와 통일
- SessionMiddleware max_age 를 SESSION_MAX_AGE 환경변수에서 읽도록 변경
  (기본 28800초=8h, OMS .env.example 과 일치)
- .env.example 에 SESSION_MAX_AGE 항목 추가
- run-local.ps1 을 .gitignore 에 추가 (run-local.bat 와 동일 정책 — 로컬 전용)
2026-05-24 13:04:02 +09:00
king e33cc8686b feat: OMS(orderlist)와 SSO 호환되도록 세션 계약 정렬
- 세션 쿠키 이름을 SESSION_COOKIE_NAME env 로 OMS 와 통일
- 로그인 성공 시 top-level user_email / user_name 키도 함께 저장
- get_user() 가 OMS 가 만든 SSO 세션(top-level email만 있는 경우)도 인정
- /login 에 ?next= 지원 (open redirect 방지 위해 같은 호스트 절대경로만 허용)
2026-05-24 05:38:43 +09:00
king 023ce80d59 fix: env() helper가 빈 값일 때도 default로 폴백 2026-05-24 05:08:34 +09:00
king e8a85be36c feat: 주문리스트를 /orderlist/ 리버스 프록시 경로로 통합
- 메뉴 카드 새 탭 열기 + /orderlist/health/db 헬스 배지 (온라인/오프라인) 추가
- CUSTOMER_ORDER_LIST_URL 기본값을 /orderlist/ 로 (NPM 같은 도메인 하위 경로)
- orderlist 측 compose 정리 스크립트 추가 (ports 제거, npm_default 외부 네트워크 attach)
2026-05-24 05:04:29 +09:00
king 0c007e6432 fix: 로고 크기 페이지별 분리 (denied 284px, 나머지 100px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:26:37 +09:00
king b070fabb96 fix: 메인 헤더 로고 284x284 원본 크기로 표시
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:23:20 +09:00
king bad5d04d8b fix: 메인 헤더 텍스트로 변경/높이 축소, 로그인 로고 44px 복원
- main.html 헤더: 로고 제거 → "DBX 업무포털" 흰색 텍스트, 높이 64px→44px
- login/denied 브랜드 패널 로고: 44px 복원

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:18:38 +09:00
king 6c82415e02 fix: 메인 헤더 로고 크게(48px), 로그인/접근거부 로고 작게(30px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:13:43 +09:00
king cd545d723e fix: 메인 헤더 원복 및 로그인 로고 크기 조정 (28px → 36px)
- main.html 헤더: SVG 아이콘+텍스트 방식으로 원복
- 로그인/접근거부 브랜드 패널 로고: 36px로 조정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:09:07 +09:00
king a52b66868d fix: 로그인 브랜드 패널 로고 크기 축소 (44px → 28px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:02:24 +09:00
king f93eac9ce5 design: DBX 로고 이미지 적용 (로그인·접근거부·메인 헤더)
- dbx-logo.png를 app/static에 추가
- login.html / denied.html 브랜드 패널 SVG 아이콘 → 로고 이미지로 교체
- main.html 헤더 SVG 아이콘 → 로고 이미지로 교체
- styles.css에 .brand-logo-img / .header-logo-img 스타일 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 23:36:11 +09:00
king a85322da58 chore: push-gitea.bat / run-local.bat를 .gitignore에 추가
로컬 전용 스크립트(자격증명 포함 가능)가 Gitea에 올라가지 않도록 제외.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 02:10:34 +09:00
king c4ae1ab3e6 UI: King 텍스트 움직임 범위 확장, 별 도형 제거, 도형 밝기 조정
- kingFloat 애니메이션 translate 범위를 ±16px → ±70px 로 확장
- login.html / denied.html 에서 shape-7(별) div 제거
- shape-1~6 도형 밝기 은은하게 감소 (이전 수준으로 복구)
- .shape-king text-transform: none → "King" 으로 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 02:04:54 +09:00
king 672a99ef80 design: shape-8 삭제, 별 위치 우측 이동, King 반짝 텍스트 추가 2026-05-22 01:19:19 +09:00
king d2b145576b design: 브랜드 패널 도형 강화 — 세모·별 추가, 두께·밝기 증가, 모션 가속 2026-05-22 01:15:23 +09:00
king e1af7285a1 design: DBX Corporation 명칭 수정, 폰트 확대, 브랜드 패널 애니메이션 도형 추가
- 모든 페이지 'DBX Corp' → 'DBX Corporation' 통일
- 브랜드 패널 좌측에 천천히 움직이는 도형 5개 추가 (CSS 애니메이션)
- 전체 기본 폰트 15px → 16px, 제목/카드 크기 확대
- 'Google Workspace 계정...' 문장 한 줄 표시 처리
2026-05-22 01:05:47 +09:00
king 6993ab9397 chore: Pretendard 폰트를 로컬 TTF에서 jsDelivr CDN으로 교체 (저장소 -8MB) 2026-05-22 00:51:00 +09:00
king 280ed02790 chore: 불필요 파일 삭제 (nginx conf, Windows 스크립트) 2026-05-22 00:48:24 +09:00
king a128207762 fix: 운영 포트를 8080으로 변경 2026-05-22 00:40:17 +09:00
king 7f37402561 fix: 운영 포트를 80에서 8000으로 변경 (NPM과 충돌 해결) 2026-05-22 00:39:36 +09:00
king 6203917ac0 chore: .gitignore에 .claude/ 제외 항목 추가
Claude Code 내부 설정 디렉토리(.claude/)를 저장소에서 제외

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 23:47:23 +09:00
king 21de32a568 chore: push-gitea.bat에 민감 파일 사전 검사 추가
푸시 전 git에 추적 중인 민감 파일(.env, *.pem, *.key,
*secret*, *password*, *credential*, *token* 등)을 자동 검사하여
발견 시 푸시를 차단하고 제거 방법을 안내함

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 23:45:41 +09:00
king 60a1426a23 design: 기업용 UI 리디자인 및 로컬 실행 스크립트 추가
- 로그인/접근거부 페이지: 좌우 분할 레이아웃(다크 네이비 브랜드 패널 + 흰색 폼),
  실제 Google G 컬러 버튼, 자물쇠·안내 아이콘 적용
- 메인 페이지: 다크 네이비 헤더, 웰컴 히어로 배너(오늘 날짜 JS 자동 표시),
  SVG 아이콘이 있는 업무 카드 그리드, 호버 시 상단 블루 액센트 라인
- styles.css: 코퍼레이트 네이비/블루 색상 토큰 체계로 전면 재작성,
  Pretendard 폰트 유지, 모바일 반응형 포함
- run-local.bat / run-local.ps1: 더블클릭 또는 인수(stop/logs/ps/restart)로
  로컬 Docker 컨테이너를 간편하게 관리하는 스크립트 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 23:38:32 +09:00
king c93e2be0a7 feat: 초기 커밋 — Pretendard 폰트 적용 및 Docker 배포 구성
- Pretendard Regular/Bold/Thin 폰트를 app/static/fonts/ 에 추가하고
  @font-face 로 등록하여 전체 페이지에 적용
- Dockerfile(python:3.12-slim + uvicorn --proxy-headers) 작성
- docker-compose.yml: NPM 뒤 운영 서버용 (포트 80)
- docker-compose.local.yml: 로컬 테스트용 (포트 8080)
- .env.local.example: 로컬 OAuth 설정 가이드 포함
- .dockerignore: 이미지 빌드 컨텍스트 최소화
- .gitignore: .env / .env.local 제외 명시
- README: Docker 빌드·배포·업데이트 절차 문서화

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 22:43:41 +09:00