import 'package:dartz/dartz.dart'; import '../../core/errors/failures.dart'; import '../../models/user_model.dart'; import '../../data/models/common/paginated_response.dart'; /// 사용자 관리 Repository 인터페이스 (서버 API v0.2.1 대응) /// Clean Architecture Domain Layer - Repository 계약 abstract class UserRepository { /// 사용자 목록 조회 (페이지네이션 지원) /// [page] 페이지 번호 (기본값: 1) /// [perPage] 페이지당 항목 수 (기본값: 20) /// [role] 역할 필터 (admin, manager, staff) /// [isActive] 활성화 상태 필터 /// Returns: 페이지네이션된 사용자 목록 Future>> getUsers({ int? page, int? perPage, UserRole? role, bool? isActive, }); /// 단일 사용자 조회 /// [id] 사용자 고유 식별자 /// Returns: 사용자 상세 정보 Future> getUserById(int id); /// 사용자 계정 생성 /// [user] 생성할 사용자 정보 (username, email, name, role 필수) /// [password] 초기 비밀번호 (필수, 6자 이상) /// Returns: 생성된 사용자 정보 (ID 포함) Future> createUser({ required String username, required String email, required String password, required String name, String? phone, required UserRole role, }); /// 사용자 정보 수정 /// [id] 수정할 사용자 고유 식별자 /// [user] 수정할 사용자 정보 /// [newPassword] 새 비밀번호 (선택적) /// Returns: 수정된 사용자 정보 Future> updateUser(int id, User user, {String? newPassword}); /// 사용자 소프트 삭제 (is_active = false) /// [id] 삭제할 사용자 고유 식별자 /// Returns: 삭제 성공/실패 여부 Future> deleteUser(int id); /// 사용자명 사용 가능 여부 확인 /// [username] 체크할 사용자명 /// Returns: 사용 가능 여부 응답 Future> checkUsernameAvailability(String username); }