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