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:
hansoo
2025-07-12 15:27:54 +09:00
parent 6a208d6b06
commit 9851627ff1
411 changed files with 14458 additions and 8680 deletions

View File

@@ -1,12 +1,12 @@
import React from 'react';
import { Transaction } from '@/contexts/budget/types';
import TransactionEditDialog from './TransactionEditDialog';
import { ChevronRight } from 'lucide-react';
import { useBudget } from '@/contexts/budget/BudgetContext';
import { Link } from 'react-router-dom';
import { useRecentTransactions } from '@/hooks/transactions/useRecentTransactions';
import { useRecentTransactionsDialog } from '@/hooks/transactions/useRecentTransactionsDialog';
import RecentTransactionItem from './recent-transactions/RecentTransactionItem';
import React from "react";
import { Transaction } from "@/contexts/budget/types";
import TransactionEditDialog from "./TransactionEditDialog";
import { ChevronRight } from "lucide-react";
import { useBudget } from "@/contexts/budget/BudgetContext";
import { Link } from "react-router-dom";
import { useRecentTransactions } from "@/hooks/transactions/useRecentTransactions";
import { useRecentTransactionsDialog } from "@/hooks/transactions/useRecentTransactionsDialog";
import RecentTransactionItem from "./recent-transactions/RecentTransactionItem";
interface RecentTransactionsSectionProps {
transactions: Transaction[];
@@ -15,19 +15,20 @@ interface RecentTransactionsSectionProps {
const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
transactions,
onUpdateTransaction
onUpdateTransaction,
}) => {
const { updateTransaction, deleteTransaction } = useBudget();
// 트랜잭션 삭제 관련 로직은 커스텀 훅으로 분리
const { handleDeleteTransaction, isDeleting } = useRecentTransactions(deleteTransaction);
const { handleDeleteTransaction, isDeleting } =
useRecentTransactions(deleteTransaction);
// 다이얼로그 관련 로직 분리
const {
selectedTransaction,
isDialogOpen,
handleTransactionClick,
setIsDialogOpen
const {
selectedTransaction,
isDialogOpen,
handleTransactionClick,
setIsDialogOpen,
} = useRecentTransactionsDialog();
const handleUpdateTransaction = (updatedTransaction: Transaction) => {
@@ -42,14 +43,17 @@ const RecentTransactionsSection: React.FC<RecentTransactionsSectionProps> = ({
<div className="mt-4 mb-[50px]">
<div className="flex justify-between items-center mb-2">
<h2 className="text-lg font-semibold"> </h2>
<Link to="/transactions" className="text-sm text-neuro-income flex items-center">
<Link
to="/transactions"
className="text-sm text-neuro-income flex items-center"
>
<ChevronRight size={16} />
</Link>
</div>
<div className="neuro-card divide-y divide-gray-100 w-full">
{transactions.length > 0 ? (
transactions.map(transaction => (
transactions.map((transaction) => (
<RecentTransactionItem
key={transaction.id}
transaction={transaction}