import 'package:dartz/dartz.dart'; import '../../core/errors/failures.dart'; import '../../data/models/auth/auth_user.dart'; import '../../data/models/auth/login_request.dart'; import '../../data/models/auth/login_response.dart'; import '../../data/models/auth/token_response.dart'; import '../../data/models/auth/refresh_token_request.dart'; /// 인증 Repository 인터페이스 /// 사용자 로그인, 로그아웃, 토큰 관리 등 인증 관련 기능을 담당 abstract class AuthRepository { /// 사용자 로그인 /// [loginRequest] 로그인 요청 데이터 (사용자명, 비밀번호) /// Returns: 로그인 응답 (토큰, 사용자 정보) Future> login(LoginRequest loginRequest); /// 사용자 로그아웃 /// 서버에 로그아웃 요청을 보내고 세션을 종료 /// Returns: 로그아웃 성공/실패 여부 Future> logout(); /// 액세스 토큰 갱신 /// [refreshRequest] 리프레시 토큰 요청 데이터 /// Returns: 새로운 토큰 정보 Future> refreshToken(RefreshTokenRequest refreshRequest); /// 현재 인증된 사용자 정보 조회 /// Returns: 현재 사용자 정보 Future> getCurrentUser(); /// 인증 상태 확인 /// 현재 사용자가 인증되어 있는지 확인 /// Returns: 인증 여부 (true: 인증됨, false: 미인증) Future> isAuthenticated(); /// 비밀번호 변경 /// [currentPassword] 현재 비밀번호 /// [newPassword] 새 비밀번호 /// Returns: 비밀번호 변경 성공/실패 여부 Future> changePassword(String currentPassword, String newPassword); /// 비밀번호 재설정 요청 /// [email] 비밀번호 재설정을 요청할 이메일 주소 /// Returns: 비밀번호 재설정 요청 성공/실패 여부 Future> requestPasswordReset(String email); /// 세션 유효성 검증 /// 현재 저장된 토큰이 유효한지 서버에서 검증 /// Returns: 세션 유효성 여부 Future> validateSession(); /// 로컬 저장소에 보관된 리프레시 토큰 조회 /// Returns: 저장된 리프레시 토큰(없으면 null) Future> getStoredRefreshToken(); /// 로컬 저장소에 보관된 액세스 토큰 조회 /// Returns: 저장된 액세스 토큰(없으면 null) Future> getStoredAccessToken(); /// 로컬 세션 정리(토큰/사용자 정보 삭제) Future> clearLocalSession(); }