feat: Add CI/CD pipeline and code quality improvements
- Add GitHub Actions workflow for automated CI/CD - Configure Node.js 18.x and 20.x matrix testing - Add TypeScript type checking step - Add ESLint code quality checks with enhanced rules - Add Prettier formatting verification - Add production build validation - Upload build artifacts for deployment - Set up automated testing on push/PR - Replace console.log with environment-aware logger - Add pre-commit hooks for code quality - Exclude archive folder from linting 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,53 +1,58 @@
|
||||
|
||||
import { supabase } from '@/archive/lib/supabase';
|
||||
import { showAuthToast } from '@/utils/auth';
|
||||
import { supabase } from "@/archive/lib/supabase";
|
||||
import { authLogger } from "@/utils/logger";
|
||||
import { showAuthToast } from "@/utils/auth";
|
||||
|
||||
/**
|
||||
* 로그인 기능 - Supabase Cloud 환경에 최적화
|
||||
*/
|
||||
export const signInWithDirectApi = async (email: string, password: string) => {
|
||||
console.log('Supabase Cloud 로그인 시도');
|
||||
|
||||
authLogger.info("Supabase Cloud 로그인 시도");
|
||||
|
||||
try {
|
||||
// Supabase Cloud를 통한 로그인 요청
|
||||
const { data, error } = await supabase.auth.signInWithPassword({
|
||||
email,
|
||||
password
|
||||
password,
|
||||
});
|
||||
|
||||
|
||||
// 오류 응답 처리
|
||||
if (error) {
|
||||
console.error('로그인 오류:', error);
|
||||
|
||||
authLogger.error("로그인 오류:", error);
|
||||
|
||||
// 오류 메시지 포맷팅
|
||||
let errorMessage = error.message;
|
||||
|
||||
if (error.message.includes('Invalid login credentials')) {
|
||||
errorMessage = '이메일 또는 비밀번호가 올바르지 않습니다.';
|
||||
} else if (error.message.includes('Email not confirmed')) {
|
||||
errorMessage = '이메일 인증이 완료되지 않았습니다. 이메일을 확인해주세요.';
|
||||
|
||||
if (error.message.includes("Invalid login credentials")) {
|
||||
errorMessage = "이메일 또는 비밀번호가 올바르지 않습니다.";
|
||||
} else if (error.message.includes("Email not confirmed")) {
|
||||
errorMessage =
|
||||
"이메일 인증이 완료되지 않았습니다. 이메일을 확인해주세요.";
|
||||
}
|
||||
|
||||
showAuthToast('로그인 실패', errorMessage, 'destructive');
|
||||
|
||||
showAuthToast("로그인 실패", errorMessage, "destructive");
|
||||
return { error: { message: errorMessage }, user: null };
|
||||
}
|
||||
|
||||
|
||||
// 로그인 성공 처리
|
||||
if (data && data.user) {
|
||||
console.log('로그인 성공:', data.user);
|
||||
showAuthToast('로그인 성공', '환영합니다!');
|
||||
authLogger.info("로그인 성공:", data.user);
|
||||
showAuthToast("로그인 성공", "환영합니다!");
|
||||
return { error: null, user: data.user };
|
||||
} else {
|
||||
// 사용자 정보가 없는 경우 (드문 경우)
|
||||
console.warn('로그인 성공했지만 사용자 정보가 없습니다');
|
||||
showAuthToast('로그인 부분 성공', '로그인은 성공했지만 사용자 정보를 가져오지 못했습니다.', 'default');
|
||||
return { error: { message: '사용자 정보 조회 실패' }, user: null };
|
||||
authLogger.warn("로그인 성공했지만 사용자 정보가 없습니다");
|
||||
showAuthToast(
|
||||
"로그인 부분 성공",
|
||||
"로그인은 성공했지만 사용자 정보를 가져오지 못했습니다.",
|
||||
"default"
|
||||
);
|
||||
return { error: { message: "사용자 정보 조회 실패" }, user: null };
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('로그인 요청 중 예외:', error);
|
||||
const errorMessage = error.message || '로그인 중 오류가 발생했습니다.';
|
||||
|
||||
showAuthToast('로그인 요청 실패', errorMessage, 'destructive');
|
||||
authLogger.error("로그인 요청 중 예외:", error);
|
||||
const errorMessage = error.message || "로그인 중 오류가 발생했습니다.";
|
||||
|
||||
showAuthToast("로그인 요청 실패", errorMessage, "destructive");
|
||||
return { error: { message: errorMessage }, user: null };
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user