90 lines
3.9 KiB
Markdown
90 lines
3.9 KiB
Markdown
# EV 충전기 AS 관리 시스템
|
|
|
|
## 프로젝트 개요
|
|
전기차 충전기 고장 신고 및 AS 관리 시스템.
|
|
cs.byunc.com 으로 운영 중. 5825u Debian 서버, Docker Compose.
|
|
|
|
## 기술 스택
|
|
- Backend: Python FastAPI (포트 8000 내부)
|
|
- DB: PostgreSQL (evuser / evcharger)
|
|
- Frontend: 순수 HTML/CSS/JS (Nginx 정적 서빙)
|
|
- Reverse Proxy: Nginx (포트 5700 노출)
|
|
- Container: Docker Compose
|
|
|
|
## 폴더 구조
|
|
ev-charger-as/
|
|
├── docker-compose.yml
|
|
├── .env ← git 제외 (SECRET_KEY, DB 비번)
|
|
├── nginx/nginx.conf
|
|
├── backend/
|
|
│ ├── main.py ← FastAPI 앱 진입점
|
|
│ ├── models.py ← SQLAlchemy ORM
|
|
│ ├── auth.py ← bcrypt 직접 사용 (passlib 충돌 이슈 있었음)
|
|
│ ├── database.py
|
|
│ ├── utils.py ← QR생성, 파일저장
|
|
│ ├── init_db.sql ← 최초 DB 스키마 + 기본데이터
|
|
│ └── routers/
|
|
│ ├── auth_router.py
|
|
│ ├── chargers.py ← 충전기 + 충전기종류 CRUD
|
|
│ ├── reports.py ← AS 신고 (공개 엔드포인트 포함)
|
|
│ ├── repairs.py ← 정비사 조치
|
|
│ ├── costs.py ← 출장비 관리
|
|
│ ├── improvements.py ← 개선항목
|
|
│ ├── accounts.py ← 계정 관리
|
|
│ ├── settings.py ← 시스템설정 + 이미지압축설정
|
|
│ └── export.py ← 엑셀 다운로드
|
|
└── frontend/static/
|
|
├── css/style.css
|
|
├── js/
|
|
│ ├── api.js ← fetch 래퍼 (download 함수 포함)
|
|
│ ├── auth.js ← JWT 로컬스토리지 관리
|
|
│ └── imageCompress.js ← Canvas API 이미지 압축
|
|
└── pages/
|
|
├── login.html
|
|
├── report.html ← QR 신고 페이지 (공개, 현황 표시 포함)
|
|
├── admin/
|
|
│ ├── dashboard.html
|
|
│ ├── reports.html
|
|
│ ├── report-detail.html ← 출장비 요약+수정 폼
|
|
│ ├── costs.html
|
|
│ ├── improvements.html
|
|
│ ├── improvement-detail.html
|
|
│ ├── chargers.html
|
|
│ ├── charger-types.html ← 수정 기능 포함
|
|
│ ├── qr.html
|
|
│ ├── accounts.html
|
|
│ └── settings.html ← 이미지압축 설정 포함
|
|
├── mechanic/
|
|
│ ├── dashboard.html
|
|
│ ├── repair.html ← 다중사진 + 이미지압축
|
|
│ └── scan.html
|
|
└── manufacturer/
|
|
├── dashboard.html
|
|
└── improvement.html
|
|
|
|
## 사용자 역할
|
|
- 일반 사용자: QR 스캔 신고 (로그인 불필요)
|
|
- 정비사 (mechanic): 조치 입력, 중복신고 처리
|
|
- 제조사 (manufacturer): 개선항목 열람·업데이트
|
|
- 관리자 (admin): 전체 관리
|
|
|
|
## 주요 개발 원칙
|
|
- Frontend HTML 수정 → Docker 재시작 불필요 (nginx 정적 서빙)
|
|
- Backend Python 수정 → docker compose build backend && docker compose up -d --no-deps backend
|
|
- bcrypt: passlib 충돌로 bcrypt 라이브러리 직접 사용 (auth.py 참고)
|
|
- 한글 파일명 엑셀: urllib.parse.quote() 로 URL 인코딩 필수
|
|
- 이미지 압축: 브라우저 Canvas API (imageCompress.js), 설정은 /api/settings/public
|
|
|
|
## DB 주요 테이블
|
|
charger_types, chargers, users, reports, report_photos,
|
|
repairs, repair_reports, repair_photos, repair_costs,
|
|
improvements, improvement_reports, improvement_attachments,
|
|
improvement_logs, system_settings
|
|
|
|
## 현재 운영 환경
|
|
- 서버: root@debian5825u ~/cs_charger/ev-charger-as
|
|
- 접속: https://cs.byunc.com
|
|
- 내부포트: 5700
|
|
- Gitea: gitea.byunc.com
|
|
- 백업: ~/backups/ (매일 새벽 3시 크론)
|