Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -167,3 +167,24 @@ calm-scarab-478705-c7-b25fdd5670c3.json

**/values.yaml
AGENTS.md

# --- JetBrains (PyCharm, IntelliJ) 관련 설정 ---
.idea/
*.iml
*.iws
*.ipr

# --- Python 빌드 및 배포 관련 (추가 권장) ---
build/
dist/
*.egg-info/

# --- Windows 시스템 파일 ---
Thumbs.db
desktop.ini

# --- 개인 설정 및 임시 파일 ---
.env.local
.env.development.local
.env.test.local
.env.production.local
74 changes: 74 additions & 0 deletions main_server/app/repositories/auth_repository.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,77 @@
from sqlalchemy.orm import Session
from sqlalchemy import text
from app.models.user_models import User, AuthUser

class AuthRepository:
def __init__(self, db):
"""
인증 관련 데이터베이스 접근을 위한 저장소 초기화

:param db: SQLAlchemy 데이터베이스 세션
:type db: Session
"""
self.db = db

def get_user_by_email(self, email: str):
"""
이메일을 통해 사용자 정보를 조회.

:param email: 조회할 사용자의 이메일
:type email: str
:return: 조회된 유저 객체 또는 None
:rtype: User | None
"""

return self.db.query(User).filter(User.email == email).first()

def get_auth_user_by_id(self, user_id:str):
"""
사용자 ID를 통해 인증 정보를 조회.

:param user_id: 유저의 고유 식별자
:type user_id: str
:return: 조회된 인증 정보 객체 또는 None
:rtype: AuthUser | None
"""
return self.db.query(AuthUser).filter(AuthUser.user_id == user_id).first()

def create_user(self, email:str, name:str):
"""
새로운 유저 기본 정보를 생성. (flush를 통해 ID를 생성함)

:param email: 유저 이메일
:type email: str
:param name: 유저 이름
:type name: str
:return: 생성된 유저 객체
:rtype: User
"""
new_user = User(email=email, name=name)
self.db.add(new_user)
self.db.flush() # user_id생성 위해 flush
return new_user

def create_auth_user(self, shadow:AuthUser):
"""
유저의 인증 정보(비밀번호, 토큰 등)를 저장.

:param shadow: 저장할 인증 정보 객체
:type shadow: AuthUser
"""
self.db.add(shadow)
self.db.commit()

def commit(self):
"""
현재 세션의 변경사항을 확정(Commit).
"""
self.db.commit()

def refresh_user_stat(self):
"""
통계용 Materialized View를 갱신.
"""
self.db.execute(text('REFRESH MATERIALIZED VIEW "USER_STAT"'))
self.db.commit()


30 changes: 29 additions & 1 deletion main_server/app/repositories/jandi_repository.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
from sqlalchemy.orm import Session
from datetime import datetime, timedelta
from app.models.post_models import POST_AGG

class JandiRepository:
def __init__(self, db):
def __init__(self, db: Session):
"""
잔디 데이터 접근을 위한 저장소 초기화

:param db: SQLAlchemy 데이터베이스 세션
:type db: Session
"""
self.db = db

def get_posts_by_date_range(self, user_id: str, start_date: datetime, end_date: datetime) -> list[POST_AGG]:
"""
특정 기간 동안의 유저 포스트 통계 데이터를 조회합니다.

:param user_id: 조회할 유저의 ID
:type user_id: str
:param start_date: 조회 시작 날짜
:type start_date: datetime
:param end_date: 조회 종료 날짜
:type end_date: datetime
:return: POST_AGG 모델 객체 리스트
:rtype: list[POST_AGG]
"""
return self.db.query(POST_AGG).filter(
POST_AGG.user_id == user_id,
POST_AGG.date.between(start_date, end_date)
).all()
Loading