-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
backendBackend relatedBackend relateddatabaseDatabase relatedDatabase relatedfeatureNew featureNew feature
Description
개요
얼굴 인식 출석체크 시스템을 위한 SQLite 데이터베이스를 설정하고 출석 데이터 모델을 구현합니다.
배경
현재 시스템은 JSON 파일 기반으로 얼굴 데이터를 관리하고 있습니다. 출석 기록은 관계형 데이터 특성이 강하므로 SQLite를 사용하여 효율적으로 관리합니다.
요구사항
데이터베이스 스키마
CREATE TABLE attendance (
id INTEGER PRIMARY KEY AUTOINCREMENT,
face_id TEXT NOT NULL, -- face_database.json의 face_id 참조
name TEXT NOT NULL, -- 출석자 이름
date DATE NOT NULL, -- 출석 날짜 (YYYY-MM-DD)
time TIME NOT NULL, -- 출석 시간 (HH:MM:SS)
confidence REAL, -- 인식 신뢰도
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(face_id, date) -- 같은 날짜에 동일 인물은 1회만 기록
);
CREATE INDEX idx_attendance_date ON attendance(date);
CREATE INDEX idx_attendance_name ON attendance(name);
CREATE INDEX idx_attendance_face_date ON attendance(face_id, date);구현 항목
-
backend/models/attendance_db.py모듈 생성- SQLite 데이터베이스 연결 관리 (connection pool / singleton)
- 테이블 자동 생성 (앱 시작 시)
record_attendance(face_id, name, confidence)- 출석 기록 (당일 중복 방지)get_attendance_by_date(date)- 특정 날짜 출석 조회get_attendance_by_name(name, start_date, end_date)- 이름별 출석 조회get_attendance_range(start_date, end_date)- 기간별 출석 조회get_today_attendance()- 오늘 출석 현황get_attendance_stats(start_date, end_date)- 출석 통계
- 데이터베이스 파일 위치:
backend/data/attendance.db - 동일 인물 당일 중복 방지 로직 (UNIQUE 제약조건 + INSERT OR IGNORE)
- 단위 테스트 작성
기술 참고사항
- Python 표준 라이브러리
sqlite3사용 (추가 의존성 불필요) - 기존
face_database.json의face_id를 외래키처럼 참조 - Thread-safe를 위해
check_same_thread=False설정 필요 (FastAPI는 멀티스레드)
완료 기준
- SQLite DB가 앱 시작 시 자동 생성됨
- 출석 기록 CRUD 함수 동작 확인
- 동일 날짜 동일 인물 중복 기록 방지 동작 확인
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
backendBackend relatedBackend relateddatabaseDatabase relatedDatabase relatedfeatureNew featureNew feature