feat: 약재 효능 태그 시스템 추가
- herb_efficacy_tags 테이블 생성 (효능 마스터) - herb_item_tags 테이블 생성 (약재-효능 다대다 관계) - 18개 기본 효능 태그 등록 (보혈, 활혈, 보기 등) - Git 사용 가이드라인 문서 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
40be340a63
commit
808920184f
76
.claude/git_guidelines.md
Normal file
76
.claude/git_guidelines.md
Normal file
@ -0,0 +1,76 @@
|
||||
# Git 사용 가이드라인
|
||||
|
||||
## ⚠️ 중요한 주의사항
|
||||
|
||||
### 1. Git 초기화 금지
|
||||
- **절대로 `git init`를 실행하지 말 것**
|
||||
- 이 프로젝트는 이미 Gitea 서버에 연결되어 있음
|
||||
- 원격 저장소: origin (Gitea 서버)
|
||||
|
||||
### 2. 커밋 전 확인 사항
|
||||
- 항상 `git status`로 현재 상태 확인
|
||||
- `git log --oneline -n 5`로 최근 커밋 이력 확인
|
||||
- `git remote -v`로 원격 저장소 확인
|
||||
|
||||
### 3. 커밋 시 규칙
|
||||
```bash
|
||||
# 상태 확인
|
||||
git status
|
||||
|
||||
# 변경사항 확인
|
||||
git diff
|
||||
|
||||
# 논리적 단위로 나누어서 커밋
|
||||
git add [파일명]
|
||||
git commit -m "커밋 메시지"
|
||||
|
||||
# 원격 저장소에 푸시
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 4. 커밋 메시지 작성 규칙
|
||||
- **기능 추가**: `feat: 효능 태그 시스템 추가`
|
||||
- **버그 수정**: `fix: 총금액 표시 오류 수정`
|
||||
- **문서 작성**: `docs: README 업데이트`
|
||||
- **리팩토링**: `refactor: 코드 구조 개선`
|
||||
- **스타일**: `style: 코드 포맷팅`
|
||||
- **테스트**: `test: 단위 테스트 추가`
|
||||
- **기타**: `chore: 빌드 스크립트 수정`
|
||||
|
||||
### 5. 파일 관리
|
||||
- 테스트 파일들은 `.gitignore`에 추가 고려
|
||||
- 업로드 폴더는 커밋하지 않기 (uploads/)
|
||||
- 데이터베이스 파일은 주의해서 관리
|
||||
|
||||
### 6. 브랜치 전략
|
||||
- 현재 main 브랜치 사용 중
|
||||
- 큰 기능은 별도 브랜치 생성 고려
|
||||
```bash
|
||||
# 브랜치 생성 및 체크아웃
|
||||
git checkout -b feature/기능명
|
||||
|
||||
# 작업 후 main으로 머지
|
||||
git checkout main
|
||||
git merge feature/기능명
|
||||
```
|
||||
|
||||
### 7. 실수 방지
|
||||
- `git push --force`는 절대 사용 금지
|
||||
- `git reset --hard`는 신중하게 사용
|
||||
- 작업 전 `git pull` 실행 습관화
|
||||
|
||||
## 현재 프로젝트 상태
|
||||
- Repository: kdrug (한약재 재고관리 시스템)
|
||||
- Branch: main
|
||||
- Remote: origin (Gitea 서버)
|
||||
|
||||
## 체크리스트
|
||||
- [ ] git status 확인
|
||||
- [ ] 논리적 단위로 파일 그룹화
|
||||
- [ ] 의미있는 커밋 메시지 작성
|
||||
- [ ] 불필요한 파일 제외 확인
|
||||
- [ ] push 전 최종 검토
|
||||
|
||||
---
|
||||
작성일: 2026-02-15
|
||||
작성자: Claude Assistant
|
||||
158
check_and_create_efficacy_tags.py
Normal file
158
check_and_create_efficacy_tags.py
Normal file
@ -0,0 +1,158 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
약재 효능 태그 시스템 추가 스크립트
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
|
||||
def check_and_create_efficacy_system():
|
||||
conn = sqlite3.connect('database/kdrug.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
# 1. 현재 테이블 확인
|
||||
cursor.execute("""
|
||||
SELECT name FROM sqlite_master
|
||||
WHERE type='table'
|
||||
ORDER BY name
|
||||
""")
|
||||
print("=== 현재 테이블 목록 ===")
|
||||
for table in cursor.fetchall():
|
||||
print(f" - {table[0]}")
|
||||
|
||||
# 2. herb_items 테이블 스키마 확인
|
||||
print("\n=== herb_items 테이블 구조 ===")
|
||||
cursor.execute("PRAGMA table_info(herb_items)")
|
||||
columns = cursor.fetchall()
|
||||
for col in columns:
|
||||
print(f" {col[1]} ({col[2]})")
|
||||
|
||||
# 3. 효능 태그 테이블 생성
|
||||
print("\n=== 효능 태그 시스템 생성 ===")
|
||||
|
||||
# 효능 마스터 테이블
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS herb_efficacy_tags (
|
||||
tag_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
tag_name VARCHAR(50) NOT NULL UNIQUE,
|
||||
tag_category VARCHAR(50), -- 보(補), 사(瀉), 온(溫), 량(涼) 등
|
||||
description TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
""")
|
||||
print("✅ herb_efficacy_tags 테이블 생성")
|
||||
|
||||
# 약재-효능 연결 테이블 (다대다)
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS herb_item_tags (
|
||||
herb_item_id INTEGER NOT NULL,
|
||||
tag_id INTEGER NOT NULL,
|
||||
PRIMARY KEY (herb_item_id, tag_id),
|
||||
FOREIGN KEY (herb_item_id) REFERENCES herb_items(herb_item_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_id) REFERENCES herb_efficacy_tags(tag_id) ON DELETE CASCADE
|
||||
)
|
||||
""")
|
||||
print("✅ herb_item_tags 테이블 생성")
|
||||
|
||||
# 4. 기본 효능 태그 추가
|
||||
basic_tags = [
|
||||
('보혈', '보', '혈을 보하는 효능'),
|
||||
('보기', '보', '기를 보하는 효능'),
|
||||
('보양', '보', '양기를 보하는 효능'),
|
||||
('보음', '보', '음액을 보하는 효능'),
|
||||
('활혈', '활', '혈액순환을 활발하게 하는 효능'),
|
||||
('거담', '거', '가래를 제거하는 효능'),
|
||||
('온중', '온', '속을 따뜻하게 하는 효능'),
|
||||
('온양', '온', '양기를 따뜻하게 하는 효능'),
|
||||
('청열', '청', '열을 내리는 효능'),
|
||||
('해표', '해', '표증을 해소하는 효능'),
|
||||
('소화', '소', '소화를 돕는 효능'),
|
||||
('이수', '이', '수분대사를 돕는 효능'),
|
||||
('안신', '안', '정신을 안정시키는 효능'),
|
||||
('지혈', '지', '출혈을 멈추는 효능'),
|
||||
('조화제약', '조화', '여러 약재를 조화롭게 하는 효능'),
|
||||
('대보원기', '대보', '원기를 크게 보하는 효능'),
|
||||
('보기건비', '보', '기를 보하고 비장을 건강하게 하는 효능'),
|
||||
('보중익기', '보', '중초를 보하고 기를 증진시키는 효능'),
|
||||
]
|
||||
|
||||
for tag_name, category, description in basic_tags:
|
||||
cursor.execute("""
|
||||
INSERT OR IGNORE INTO herb_efficacy_tags (tag_name, tag_category, description)
|
||||
VALUES (?, ?, ?)
|
||||
""", (tag_name, category, description))
|
||||
|
||||
print(f"✅ {len(basic_tags)}개 기본 효능 태그 추가")
|
||||
|
||||
# 5. 쌍화탕 약재들에 효능 태그 연결
|
||||
ssanghwa_herbs = [
|
||||
('숙지황', '보혈'),
|
||||
('당귀', '보혈'),
|
||||
('백작약', '보혈'),
|
||||
('천궁', '활혈'),
|
||||
('황기', '보기'),
|
||||
('인삼', '대보원기'),
|
||||
('백출', '보기건비'),
|
||||
('감초', '조화제약'),
|
||||
('생강', '온중'),
|
||||
('대추', '보중익기'),
|
||||
('육계', '온양'),
|
||||
('건강', '온중'),
|
||||
]
|
||||
|
||||
print("\n=== 약재별 효능 태그 연결 ===")
|
||||
for herb_name, tag_name in ssanghwa_herbs:
|
||||
# 약재 ID 찾기
|
||||
cursor.execute("SELECT herb_item_id FROM herb_items WHERE herb_name = ?", (herb_name,))
|
||||
herb_result = cursor.fetchone()
|
||||
|
||||
# 태그 ID 찾기
|
||||
cursor.execute("SELECT tag_id FROM herb_efficacy_tags WHERE tag_name = ?", (tag_name,))
|
||||
tag_result = cursor.fetchone()
|
||||
|
||||
if herb_result and tag_result:
|
||||
herb_id = herb_result[0]
|
||||
tag_id = tag_result[0]
|
||||
|
||||
cursor.execute("""
|
||||
INSERT OR IGNORE INTO herb_item_tags (herb_item_id, tag_id)
|
||||
VALUES (?, ?)
|
||||
""", (herb_id, tag_id))
|
||||
print(f" ✅ {herb_name} → {tag_name}")
|
||||
else:
|
||||
if not herb_result:
|
||||
print(f" ⚠️ {herb_name} 약재 없음")
|
||||
if not tag_result:
|
||||
print(f" ⚠️ {tag_name} 태그 없음")
|
||||
|
||||
conn.commit()
|
||||
|
||||
# 6. 결과 확인 - 약재별 태그 조회
|
||||
print("\n=== 약재별 효능 태그 확인 ===")
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
h.herb_name,
|
||||
GROUP_CONCAT(t.tag_name, ', ') as tags
|
||||
FROM herb_items h
|
||||
LEFT JOIN herb_item_tags ht ON h.herb_item_id = ht.herb_item_id
|
||||
LEFT JOIN herb_efficacy_tags t ON ht.tag_id = t.tag_id
|
||||
WHERE ht.tag_id IS NOT NULL
|
||||
GROUP BY h.herb_item_id
|
||||
ORDER BY h.herb_name
|
||||
""")
|
||||
|
||||
results = cursor.fetchall()
|
||||
for herb_name, tags in results:
|
||||
print(f" {herb_name}: {tags}")
|
||||
|
||||
print("\n✅ 효능 태그 시스템 구축 완료!")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 오류 발생: {e}")
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
check_and_create_efficacy_system()
|
||||
Loading…
Reference in New Issue
Block a user