📋 기획 및 설계: - PharmQ SaaS 서비스 기획서 작성 - 구독 서비스 라인업 정의 (클라우드PC, AI CCTV, CRM) - DB 스키마 설계 및 API 아키텍처 설계 🗄️ 데이터베이스 구조: - service_products: 서비스 상품 마스터 테이블 - pharmacy_subscriptions: 약국별 구독 현황 테이블 - subscription_usage_logs: 서비스 이용 로그 테이블 - billing_history: 결제 이력 테이블 - 샘플 데이터 자동 생성 (21개 구독, 월 118만원 매출) 🔧 백엔드 API 구현: - 구독 현황 통계 API (/api/subscriptions/stats) - 약국별 구독 조회 API (/api/pharmacies/subscriptions) - 구독 상세 정보 API (/api/pharmacy/{id}/subscriptions) - 구독 생성/해지 API (/api/subscriptions) 🖥️ 프론트엔드 UI 구현: - 대시보드 구독 현황 카드 (월 매출, 구독 수, 구독률 등) - 약국 목록에 구독 상태 아이콘 및 월 구독료 표시 - 약국 상세 페이지 구독 서비스 섹션 추가 - 실시간 구독 생성/해지 기능 구현 ✨ 주요 특징: - 서비스별 색상 코딩 및 이모지 아이콘 시스템 - 실시간 업데이트 (구독 생성/해지 즉시 반영) - 반응형 디자인 (모바일/태블릿 최적화) - 툴팁 기반 상세 정보 표시 📊 현재 구독 현황: - 총 월 매출: ₩1,180,000 - 구독 약국: 10/14개 (71.4%) - AI CCTV: 6개 약국, CRM: 10개 약국, 클라우드PC: 5개 약국 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
빠른 데이터베이스 수정 - 외래키 제약조건만 제거
|
|
"""
|
|
|
|
import sqlite3
|
|
import os
|
|
from datetime import datetime
|
|
|
|
def quick_fix():
|
|
"""빠르게 외래키 제약조건만 비활성화"""
|
|
db_path = '/srv/headscale-setup/data/db.sqlite'
|
|
|
|
print("🔧 빠른 수정: 외래키 제약조건 비활성화")
|
|
print("=" * 50)
|
|
|
|
# Docker 컨테이너 중지
|
|
print("⏹️ Headscale 컨테이너 중지 중...")
|
|
os.system("cd /srv/headscale-setup && docker-compose stop headscale")
|
|
|
|
# 데이터베이스 연결
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
|
|
try:
|
|
# 외래키 제약조건 영구 비활성화
|
|
print("🔓 외래키 제약조건 비활성화...")
|
|
cursor.execute("PRAGMA foreign_keys = OFF")
|
|
|
|
# 설정 확인
|
|
cursor.execute("PRAGMA foreign_keys")
|
|
fk_status = cursor.fetchone()[0]
|
|
print(f"✅ 외래키 상태: {'비활성화' if fk_status == 0 else '활성화'}")
|
|
|
|
# 테이블 확인
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
|
|
tables = cursor.fetchall()
|
|
print(f"📋 테이블 목록: {[table[0] for table in tables]}")
|
|
|
|
conn.commit()
|
|
print("💾 설정 저장 완료")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 오류: {e}")
|
|
conn.rollback()
|
|
finally:
|
|
conn.close()
|
|
|
|
# Docker 컨테이너 재시작
|
|
print("🚀 Headscale 컨테이너 재시작 중...")
|
|
os.system("cd /srv/headscale-setup && docker-compose start headscale")
|
|
|
|
print("✅ 완료! 이제 Tailscale 클라이언트 등록을 다시 시도해보세요.")
|
|
|
|
if __name__ == '__main__':
|
|
quick_fix() |