diff --git a/.eslintrc.json b/.eslintrc.json index c2bd50b..092743e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,7 +7,6 @@ "@typescript-eslint/no-explicit-any": "warn", "import/extensions": ["off"], "import/first": ["error"], - "import/named": ["error"], "import/no-duplicates": ["error"], "import/no-extraneous-dependencies": ["off"], "import/no-relative-packages": ["off"], @@ -32,6 +31,7 @@ } ], "unused-imports/no-unused-imports": ["error"], + "react-hooks/exhaustive-deps": ["off"], "@typescript-eslint/naming-convention": ["off"] } } diff --git a/app/__test__/utils/utils.spec.ts b/app/__test__/utils/utils.spec.ts index 797466c..ec04980 100644 --- a/app/__test__/utils/utils.spec.ts +++ b/app/__test__/utils/utils.spec.ts @@ -1,7 +1,7 @@ +import { Model } from 'mongoose'; import { getThumbnailInMarkdown } from '@/app/lib/utils/parse'; import { createPostSlug, generateUniqueSlug } from '@/app/lib/utils/post'; import type { Post } from '@/app/types/Post'; -import { Model } from 'mongoose'; describe('마크다운에서 이미지 경로 추출 함수 테스트', () => { it('마크다운에서 이미지 경로 추출', () => { const content = ` diff --git a/app/admin/comments/page.tsx b/app/admin/comments/page.tsx index 4bf9181..01eb064 100644 --- a/app/admin/comments/page.tsx +++ b/app/admin/comments/page.tsx @@ -1,9 +1,9 @@ 'use client'; -import { useEffect, useState } from 'react'; -import { useSession } from 'next-auth/react'; -import { useRouter } from 'next/navigation'; import Link from 'next/link'; +import { useRouter } from 'next/navigation'; +import { useSession } from 'next-auth/react'; +import { useEffect, useState } from 'react'; import IssueCard from '@/app/entities/admin/comments/IssueCard'; interface GitHubUser { diff --git a/app/admin/layout.tsx b/app/admin/layout.tsx index c13dc2a..d3236e2 100644 --- a/app/admin/layout.tsx +++ b/app/admin/layout.tsx @@ -1,7 +1,7 @@ 'use client'; import { SessionProvider } from 'next-auth/react'; -import ProtectedRoute from '@/app/entities/common/Layout/ProtectedRoute'; import { Suspense } from 'react'; +import ProtectedRoute from '@/app/entities/common/Layout/ProtectedRoute'; import SVGLoadingSpinner from '@/app/entities/common/Loading/SVGLoadingSpinner'; interface AdminPageLayoutProps { diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 2c2054f..d4a54e8 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -1,20 +1,18 @@ 'use client'; +import Link from 'next/link'; import { signIn, signOut, useSession } from 'next-auth/react'; - -import { RiFileTextLine } from 'react-icons/ri'; -import { BiFolder } from 'react-icons/bi'; -import { HiBookOpen } from 'react-icons/hi'; +import { useEffect } from 'react'; +import { BiFolder , BiCommentDetail } from 'react-icons/bi'; import { FaChartBar } from 'react-icons/fa'; -import { BiCommentDetail } from 'react-icons/bi'; +import { FaBuffer } from 'react-icons/fa6'; +import { HiBookOpen } from 'react-icons/hi'; import { IoSettingsSharp } from 'react-icons/io5'; -import Link from 'next/link'; -import GithubLogin from '@/app/entities/common/Button/GithubLogin'; +import { RiFileTextLine } from 'react-icons/ri'; +import QuickStats from '@/app/entities/admin/dashboard/QuickStats'; +import RecentActivity from '@/app/entities/admin/dashboard/RecentActivity'; import BubbleBackground from '@/app/entities/common/Background/BubbleBackground'; -import { useEffect } from 'react'; +import GithubLogin from '@/app/entities/common/Button/GithubLogin'; import useToast from '@/app/hooks/useToast'; -import { FaBuffer } from 'react-icons/fa6'; -import RecentActivity from '@/app/entities/admin/dashboard/RecentActivity'; -import QuickStats from '@/app/entities/admin/dashboard/QuickStats'; import DecryptedText from '../entities/bits/DecryptedText'; const AdminDashboard = () => { diff --git a/app/admin/posts/page.tsx b/app/admin/posts/page.tsx index 57993b0..e499c26 100644 --- a/app/admin/posts/page.tsx +++ b/app/admin/posts/page.tsx @@ -1,14 +1,14 @@ 'use client'; -import { useEffect, useState } from 'react'; -import { Post } from '@/app/types/Post'; import axios from 'axios'; -import PostListItem from '@/app/entities/post/list/PostListItem'; -import DeleteModal from '@/app/entities/common/Modal/DeleteModal'; -import { deletePost } from '@/app/entities/post/api/postAPI'; import { useRouter, useSearchParams } from 'next/navigation'; +import { useEffect, useState } from 'react'; import LoadingIndicator from '@/app/entities/common/Loading/LoadingIndicator'; -import useToast from '@/app/hooks/useToast'; +import DeleteModal from '@/app/entities/common/Modal/DeleteModal'; import Pagination from '@/app/entities/common/Pagination'; +import { deletePost } from '@/app/entities/post/api/postAPI'; +import PostListItem from '@/app/entities/post/list/PostListItem'; +import useToast from '@/app/hooks/useToast'; +import { Post } from '@/app/types/Post'; const AdminPostListPage = () => { const [posts, setPosts] = useState([]); diff --git a/app/admin/series/page.tsx b/app/admin/series/page.tsx index 8210cfc..44b9bb1 100644 --- a/app/admin/series/page.tsx +++ b/app/admin/series/page.tsx @@ -1,14 +1,14 @@ 'use client'; -import { Series } from '@/app/types/Series'; -import useDataFetch, { - useDataFetchConfig, -} from '@/app/hooks/common/useDataFetch'; import { useState } from 'react'; -import AdminSeriesList from '@/app/entities/series/list/AdminSeriesList'; +import DeleteModal from '@/app/entities/common/Modal/DeleteModal'; import Overlay from '@/app/entities/common/Overlay/Overlay'; -import CreateSeriesOverlayContainer from '@/app/entities/series/CreateSeriesOverlayContainer'; import { deleteSeries } from '@/app/entities/series/api/series'; -import DeleteModal from '@/app/entities/common/Modal/DeleteModal'; +import CreateSeriesOverlayContainer from '@/app/entities/series/CreateSeriesOverlayContainer'; +import AdminSeriesList from '@/app/entities/series/list/AdminSeriesList'; +import useDataFetch, { + useDataFetchConfig, +} from '@/app/hooks/common/useDataFetch'; +import { Series } from '@/app/types/Series'; const AdminSeriesPage = () => { const [seriesList, setSeriesList] = useState(null); const getSeriesListConfig: useDataFetchConfig = { diff --git a/app/admin/write/layout.tsx b/app/admin/write/layout.tsx index 08d2e6a..8f5dfb9 100644 --- a/app/admin/write/layout.tsx +++ b/app/admin/write/layout.tsx @@ -1,5 +1,4 @@ import { Suspense } from 'react'; -import LoadingIndicator from '@/app/entities/common/Loading/LoadingIndicator'; import BlogFormSkeleton from '@/app/entities/common/Skeleton/BlogFormSkeleton'; interface LayoutProps { diff --git a/app/admin/write/page.tsx b/app/admin/write/page.tsx index 5a3baa1..2e2cff6 100644 --- a/app/admin/write/page.tsx +++ b/app/admin/write/page.tsx @@ -1,5 +1,5 @@ -import BlogForm from '@/app/entities/post/write/BlogForm'; import { Metadata } from 'next'; +import BlogForm from '@/app/entities/post/write/BlogForm'; export const generateMetadata = async (): Promise => { return { diff --git a/app/api/admin/posts/recent/route.ts b/app/api/admin/posts/recent/route.ts index 8eb4d7d..e2b4459 100644 --- a/app/api/admin/posts/recent/route.ts +++ b/app/api/admin/posts/recent/route.ts @@ -1,11 +1,11 @@ // GET /api/admin/posts/recent - 관리자용 최근 게시글 조회 -import Post from '@/app/models/Post'; -import dbConnect from '@/app/lib/dbConnect'; import { getServerSession } from 'next-auth'; +import dbConnect from '@/app/lib/dbConnect'; +import Post from '@/app/models/Post'; export const dynamic = 'force-dynamic'; -export async function GET(req: Request) { +export async function GET() { try { const session = await getServerSession(); if (!session) { diff --git a/app/api/admin/stats/route.ts b/app/api/admin/stats/route.ts index c64035e..ced8d67 100644 --- a/app/api/admin/stats/route.ts +++ b/app/api/admin/stats/route.ts @@ -1,12 +1,12 @@ // GET /api/admin/stats - 관리자용 블로그 통계 +import { getServerSession } from 'next-auth'; +import dbConnect from '@/app/lib/dbConnect'; import Post from '@/app/models/Post'; import Series from '@/app/models/Series'; -import dbConnect from '@/app/lib/dbConnect'; -import { getServerSession } from 'next-auth'; export const dynamic = 'force-dynamic'; -export async function GET(req: Request) { +export async function GET() { try { const session = await getServerSession(); if (!session) { diff --git a/app/api/posts/[slug]/route.ts b/app/api/posts/[slug]/route.ts index 217b404..83ad40e 100644 --- a/app/api/posts/[slug]/route.ts +++ b/app/api/posts/[slug]/route.ts @@ -1,8 +1,8 @@ // app/api/posts/[slug]/route.ts -import dbConnect from '@/app/lib/dbConnect'; -import Post from '@/app/models/Post'; import { NextRequest, NextResponse } from 'next/server'; +import dbConnect from '@/app/lib/dbConnect'; import { getThumbnailInMarkdown } from '@/app/lib/utils/parse'; +import Post from '@/app/models/Post'; import Series from '@/app/models/Series'; export async function GET( diff --git a/app/api/posts/like/route.ts b/app/api/posts/like/route.ts index 06dce89..1b990c5 100644 --- a/app/api/posts/like/route.ts +++ b/app/api/posts/like/route.ts @@ -1,6 +1,6 @@ -import Like from '@/app/models/Like'; import { NextRequest } from 'next/server'; import dbConnect from '@/app/lib/dbConnect'; +import Like from '@/app/models/Like'; export const POST = async (request: Request) => { const { postId } = await request.json(); diff --git a/app/api/posts/popular/route.ts b/app/api/posts/popular/route.ts index 5b7f222..e83acd4 100644 --- a/app/api/posts/popular/route.ts +++ b/app/api/posts/popular/route.ts @@ -1,6 +1,6 @@ import dbConnect from '@/app/lib/dbConnect'; -import View from '@/app/models/View'; import Post from '@/app/models/Post'; +import View from '@/app/models/View'; export const GET = async () => { await dbConnect(); diff --git a/app/api/posts/recent/route.ts b/app/api/posts/recent/route.ts index 2039abe..f493218 100644 --- a/app/api/posts/recent/route.ts +++ b/app/api/posts/recent/route.ts @@ -1,7 +1,7 @@ // app/api/posts/latest/route.ts -import Post from '@/app/models/Post'; import dbConnect from '@/app/lib/dbConnect'; import { formatDate } from '@/app/lib/utils/format'; +import Post from '@/app/models/Post'; export const dynamic = 'force-dynamic'; // 항상 최신 데이터를 가져오기 위한 설정 diff --git a/app/api/posts/recommendation/route.ts b/app/api/posts/recommendation/route.ts index bf88abb..482d1eb 100644 --- a/app/api/posts/recommendation/route.ts +++ b/app/api/posts/recommendation/route.ts @@ -1,7 +1,7 @@ import dbConnect from '@/app/lib/dbConnect'; +import Like from '@/app/models/Like'; import Post from '@/app/models/Post'; import View from '@/app/models/View'; -import Like from '@/app/models/Like'; export const GET = async (request: Request) => { await dbConnect(); diff --git a/app/api/posts/route.ts b/app/api/posts/route.ts index 012e4b2..eb6c9a0 100644 --- a/app/api/posts/route.ts +++ b/app/api/posts/route.ts @@ -1,11 +1,11 @@ // GET /api/posts - 모든 글 조회 (페이지네이션 지원) import { QuerySelector } from 'mongoose'; -import Series from '@/app/models/Series'; -import dbConnect from '@/app/lib/dbConnect'; -import Post from '@/app/models/Post'; import { getServerSession } from 'next-auth'; -import { generateUniqueSlug } from '@/app/lib/utils/post'; +import dbConnect from '@/app/lib/dbConnect'; import { getThumbnailInMarkdown } from '@/app/lib/utils/parse'; +import { generateUniqueSlug } from '@/app/lib/utils/post'; +import Post from '@/app/models/Post'; +import Series from '@/app/models/Series'; export async function GET(req: Request) { try { diff --git a/app/api/posts/view/route.ts b/app/api/posts/view/route.ts index ffcf3cb..053fbfd 100644 --- a/app/api/posts/view/route.ts +++ b/app/api/posts/view/route.ts @@ -1,6 +1,6 @@ -import View from '@/app/models/View'; import { NextRequest } from 'next/server'; import dbConnect from '@/app/lib/dbConnect'; +import View from '@/app/models/View'; export const POST = async (request: Request) => { const { postId } = await request.json(); diff --git a/app/api/redirect/recent/route.ts b/app/api/redirect/recent/route.ts index 63e60df..ecf82fb 100644 --- a/app/api/redirect/recent/route.ts +++ b/app/api/redirect/recent/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server'; -import Post from '@/app/models/Post'; import dbConnect from '@/app/lib/dbConnect'; +import Post from '@/app/models/Post'; export const dynamic = 'force-dynamic'; // 캐싱 방지 diff --git a/app/api/rss/route.ts b/app/api/rss/route.ts index 90893d4..a3e3cfb 100644 --- a/app/api/rss/route.ts +++ b/app/api/rss/route.ts @@ -1,6 +1,6 @@ -import { generateRssFeed } from '@/app/lib/rss'; import { NextResponse } from 'next/server'; import dbConnect from '@/app/lib/dbConnect'; +import { generateRssFeed } from '@/app/lib/rss'; import Post from '@/app/models/Post'; export async function GET() { diff --git a/app/api/series/[slug]/route.ts b/app/api/series/[slug]/route.ts index 420453c..6627b3d 100644 --- a/app/api/series/[slug]/route.ts +++ b/app/api/series/[slug]/route.ts @@ -1,8 +1,8 @@ import { NextResponse } from 'next/server'; +import { getServerSession } from 'next-auth'; import dbConnect from '@/app/lib/dbConnect'; import Series from '@/app/models/Series'; import '@/app/models/Post'; -import { getServerSession } from 'next-auth'; export async function GET( request: Request, diff --git a/app/api/series/route.ts b/app/api/series/route.ts index 9bf9cd6..e95ad5d 100644 --- a/app/api/series/route.ts +++ b/app/api/series/route.ts @@ -1,8 +1,8 @@ import { NextResponse } from 'next/server'; +import { getServerSession } from 'next-auth'; import dbConnect from '@/app/lib/dbConnect'; -import Series from '@/app/models/Series'; import { createPostSlug } from '@/app/lib/utils/post'; -import { getServerSession } from 'next-auth'; +import Series from '@/app/models/Series'; export async function POST(request: Request) { try { diff --git a/app/api/upload/route.ts b/app/api/upload/route.ts index 7c14a56..13c2651 100644 --- a/app/api/upload/route.ts +++ b/app/api/upload/route.ts @@ -1,6 +1,6 @@ -import { handleUpload, type HandleUploadBody } from '@vercel/blob/client'; import { NextResponse } from 'next/server'; import { getServerSession } from 'next-auth'; +import { handleUpload, type HandleUploadBody } from '@vercel/blob/client'; export async function POST(request: Request): Promise { const session = await getServerSession(); diff --git a/app/entities/admin/comments/IssueCard.tsx b/app/entities/admin/comments/IssueCard.tsx index 1ad535b..450e481 100644 --- a/app/entities/admin/comments/IssueCard.tsx +++ b/app/entities/admin/comments/IssueCard.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useState } from 'react'; import Link from 'next/link'; +import { useState } from 'react'; import CommentItem from './CommentItem'; interface GitHubUser { diff --git a/app/entities/admin/dashboard/RecentActivity.tsx b/app/entities/admin/dashboard/RecentActivity.tsx index b692bec..f800fa5 100644 --- a/app/entities/admin/dashboard/RecentActivity.tsx +++ b/app/entities/admin/dashboard/RecentActivity.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useEffect, useState } from 'react'; import Link from 'next/link'; +import { useEffect, useState } from 'react'; import { formatDate } from '@/app/lib/utils/format'; interface RecentPost { diff --git a/app/entities/bits/DecryptedText.tsx b/app/entities/bits/DecryptedText.tsx index 6f92d85..5e122d0 100644 --- a/app/entities/bits/DecryptedText.tsx +++ b/app/entities/bits/DecryptedText.tsx @@ -1,5 +1,5 @@ -import { useEffect, useState, useRef } from 'react'; import { motion, HTMLMotionProps } from 'motion/react'; +import { useEffect, useState, useRef } from 'react'; interface DecryptedTextProps extends HTMLMotionProps<'span'> { text: string; diff --git a/app/entities/comment/Comments.tsx b/app/entities/comment/Comments.tsx index 00c54f5..a6df3c0 100644 --- a/app/entities/comment/Comments.tsx +++ b/app/entities/comment/Comments.tsx @@ -2,7 +2,6 @@ import { useEffect, useState } from 'react'; import Skeleton from '@/app/entities/common/Skeleton/Skeleton'; import useTheme from '@/app/hooks/useTheme'; -import SVGLoadingSpinner from '@/app/entities/common/Loading/SVGLoadingSpinner'; // 실제 댓글 렌더링을 담당하는 별도 컴포넌트 const UtterancesComments = ({ theme }: { theme: string }) => { diff --git a/app/entities/common/Animation/NotFound.tsx b/app/entities/common/Animation/NotFound.tsx index db86149..96ca7ba 100644 --- a/app/entities/common/Animation/NotFound.tsx +++ b/app/entities/common/Animation/NotFound.tsx @@ -1,6 +1,6 @@ +import Link from 'next/link'; import LottiePlayer from '@/app/entities/common/Animation/LottiePlayer'; import NotFoundAnimation from '@/app/public/assets/notfound2.json'; -import Link from 'next/link'; interface NotFoundProps { message?: string; diff --git a/app/entities/common/Layout/ProtectedRoute.tsx b/app/entities/common/Layout/ProtectedRoute.tsx index 4eac0b0..eec1797 100644 --- a/app/entities/common/Layout/ProtectedRoute.tsx +++ b/app/entities/common/Layout/ProtectedRoute.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect } from 'react'; import { signIn, useSession } from 'next-auth/react'; +import { useEffect } from 'react'; interface ProtectedRouteProps { children: React.ReactNode; diff --git a/app/entities/common/Loading/LoadingIndicator.tsx b/app/entities/common/Loading/LoadingIndicator.tsx index 771b967..07cb7cd 100644 --- a/app/entities/common/Loading/LoadingIndicator.tsx +++ b/app/entities/common/Loading/LoadingIndicator.tsx @@ -1,6 +1,6 @@ 'use client'; -import animation from '@/app/public/assets/loadingAnimation1.json'; import dynamic from 'next/dynamic'; +import animation from '@/app/public/assets/loadingAnimation1.json'; interface LoadingIndicatorProps { message?: string; diff --git a/app/entities/common/NavBar.tsx b/app/entities/common/NavBar.tsx index 4af1534..c96911d 100644 --- a/app/entities/common/NavBar.tsx +++ b/app/entities/common/NavBar.tsx @@ -1,10 +1,10 @@ 'use client'; import Link from 'next/link'; import { useEffect, useState } from 'react'; -import Profile from '@/app/entities/common/Profile'; +import { IoMoonSharp, IoSunnySharp } from 'react-icons/io5'; import IconButton from '@/app/entities/common/Button/IconButton'; +import Profile from '@/app/entities/common/Profile'; import useTheme from '@/app/hooks/useTheme'; -import { IoMoonSharp, IoSunnySharp } from 'react-icons/io5'; const NavBar = () => { const [isFixed, setIsFixed] = useState(false); const { theme, toggleTheme } = useTheme(); diff --git a/app/entities/common/Overlay/Search/SearchOverlayContainer.tsx b/app/entities/common/Overlay/Search/SearchOverlayContainer.tsx index 9877335..7f89e18 100644 --- a/app/entities/common/Overlay/Search/SearchOverlayContainer.tsx +++ b/app/entities/common/Overlay/Search/SearchOverlayContainer.tsx @@ -1,6 +1,6 @@ import { FaSearch } from 'react-icons/fa'; -import Tag from '@/app/entities/common/Tag'; import { FaX } from 'react-icons/fa6'; +import Tag from '@/app/entities/common/Tag'; const SearchOverlayContainer = (props: { setQuery: (query: string) => void; diff --git a/app/entities/common/Pagination.tsx b/app/entities/common/Pagination.tsx index 269f30c..569e9df 100644 --- a/app/entities/common/Pagination.tsx +++ b/app/entities/common/Pagination.tsx @@ -1,8 +1,8 @@ 'use client'; -import React from 'react'; import Link from 'next/link'; import { usePathname, useSearchParams } from 'next/navigation'; +import React from 'react'; interface PaginationProps { totalItems: number; diff --git a/app/entities/common/Profile.tsx b/app/entities/common/Profile.tsx index 6403b19..6998d6f 100644 --- a/app/entities/common/Profile.tsx +++ b/app/entities/common/Profile.tsx @@ -1,6 +1,6 @@ import { StaticImport } from 'next/dist/shared/lib/get-img-props'; -import React from 'react'; import Image from 'next/image'; +import React from 'react'; interface Props { profileThumbnail?: string | StaticImport; diff --git a/app/entities/common/Skeleton/SeriesGridSkeleton.tsx b/app/entities/common/Skeleton/SeriesGridSkeleton.tsx index b90ede1..cbb76ac 100644 --- a/app/entities/common/Skeleton/SeriesGridSkeleton.tsx +++ b/app/entities/common/Skeleton/SeriesGridSkeleton.tsx @@ -1,5 +1,5 @@ -import SeriesPreviewSkeleton from '@/app/entities/common/Skeleton/SeriesPreviewSkeleton'; import React from 'react'; +import SeriesPreviewSkeleton from '@/app/entities/common/Skeleton/SeriesPreviewSkeleton'; const SeriesGridSkeleton = () => { return ( diff --git a/app/entities/common/Skeleton/SeriesPreviewSkeleton.tsx b/app/entities/common/Skeleton/SeriesPreviewSkeleton.tsx index 61ffd06..c097430 100644 --- a/app/entities/common/Skeleton/SeriesPreviewSkeleton.tsx +++ b/app/entities/common/Skeleton/SeriesPreviewSkeleton.tsx @@ -1,5 +1,5 @@ -import Skeleton from '@/app/entities/common/Skeleton/Skeleton'; import React from 'react'; +import Skeleton from '@/app/entities/common/Skeleton/Skeleton'; const SeriesPreviewSkeleton = () => { const darkmodeStyle = `dark:bg-neutral-900 dark:text-neutral-200 dark:border-neutral-800`; diff --git a/app/entities/portfolio/PortfolioPreview.tsx b/app/entities/portfolio/PortfolioPreview.tsx index e4e6687..0f48b1b 100644 --- a/app/entities/portfolio/PortfolioPreview.tsx +++ b/app/entities/portfolio/PortfolioPreview.tsx @@ -2,8 +2,8 @@ import Image from 'next/image'; import Link from 'next/link'; import { useState } from 'react'; -import { Project } from '@/app/types/Portfolio'; import { FaGithub, FaGlobe } from 'react-icons/fa'; +import { Project } from '@/app/types/Portfolio'; interface PortfolioPreviewProps { project: Project; diff --git a/app/entities/portfolio/PortfolioStone.tsx b/app/entities/portfolio/PortfolioStone.tsx index 19225b1..e984598 100644 --- a/app/entities/portfolio/PortfolioStone.tsx +++ b/app/entities/portfolio/PortfolioStone.tsx @@ -1,8 +1,8 @@ -import { Project } from '@/app/types/Portfolio'; import Image from 'next/image'; import Link from 'next/link'; -import { FaGithub, FaGlobe } from 'react-icons/fa'; import React from 'react'; +import { FaGithub, FaGlobe } from 'react-icons/fa'; +import { Project } from '@/app/types/Portfolio'; interface PortfolioStoneProps { project: Project; diff --git a/app/entities/portfolio/PortfolioStoneGrid.tsx b/app/entities/portfolio/PortfolioStoneGrid.tsx index 1deb051..71b9074 100644 --- a/app/entities/portfolio/PortfolioStoneGrid.tsx +++ b/app/entities/portfolio/PortfolioStoneGrid.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Project } from '@/app/types/Portfolio'; import React, { useState, useEffect } from 'react'; import PortfolioStone from '@/app/entities/portfolio/PortfolioStone'; +import { Project } from '@/app/types/Portfolio'; const PortfolioStoneGrid = ({ projects }: { projects: Project[] }) => { const [hoveredIndex, setHoveredIndex] = useState(null); diff --git a/app/entities/portfolio/detail/ProjectChallenges.tsx b/app/entities/portfolio/detail/ProjectChallenges.tsx index c6da875..c4b5dc7 100644 --- a/app/entities/portfolio/detail/ProjectChallenges.tsx +++ b/app/entities/portfolio/detail/ProjectChallenges.tsx @@ -1,6 +1,6 @@ -import { Challenge } from '@/app/types/Portfolio'; import Link from 'next/link'; import { FaLink } from 'react-icons/fa6'; +import { Challenge } from '@/app/types/Portfolio'; interface ProjectChallengesProps { challenges: Challenge[]; diff --git a/app/entities/portfolio/detail/ProjectScreenshots.tsx b/app/entities/portfolio/detail/ProjectScreenshots.tsx index 5d8750b..61745dd 100644 --- a/app/entities/portfolio/detail/ProjectScreenshots.tsx +++ b/app/entities/portfolio/detail/ProjectScreenshots.tsx @@ -1,5 +1,5 @@ -import { IoMdArrowDropleft, IoMdArrowDropright } from 'react-icons/io'; import Image from 'next/image'; +import { IoMdArrowDropleft, IoMdArrowDropright } from 'react-icons/io'; interface ProjectScreenshotsProps { handlePreviousImage: () => void; diff --git a/app/entities/post/detail/PostActionSection.tsx b/app/entities/post/detail/PostActionSection.tsx index 9b4587e..2fded14 100644 --- a/app/entities/post/detail/PostActionSection.tsx +++ b/app/entities/post/detail/PostActionSection.tsx @@ -1,11 +1,11 @@ 'use client'; -import useToast from '@/app/hooks/useToast'; -import { MdIosShare } from 'react-icons/md'; -import { IoEye } from 'react-icons/io5'; +import axios from 'axios'; import { useEffect, useState } from 'react'; -import useFingerprint from '@/app/hooks/useFingerprint'; import { FaRegHeart, FaHeart } from 'react-icons/fa'; -import axios from 'axios'; +import { IoEye } from 'react-icons/io5'; +import { MdIosShare } from 'react-icons/md'; +import useFingerprint from '@/app/hooks/useFingerprint'; +import useToast from '@/app/hooks/useToast'; interface PostActionSectionProps { postId?: string; diff --git a/app/entities/post/detail/PostBody.tsx b/app/entities/post/detail/PostBody.tsx index 707a997..df1ad70 100644 --- a/app/entities/post/detail/PostBody.tsx +++ b/app/entities/post/detail/PostBody.tsx @@ -1,13 +1,13 @@ 'use client'; +import { useState } from 'react'; import LoadingIndicator from '@/app/entities/common/Loading/LoadingIndicator'; -import MDEditor from '@uiw/react-md-editor'; +import ImageZoomOverlayContainer from '@/app/entities/common/Overlay/Image/ImageZoomOverlayContainer'; +import Overlay from '@/app/entities/common/Overlay/Overlay'; import PostTOC from '@/app/entities/post/detail/PostTOC'; -import useTheme from '@/app/hooks/useTheme'; import TagBox from '@/app/entities/post/tags/TagBox'; -import { useState } from 'react'; -import Overlay from '@/app/entities/common/Overlay/Overlay'; -import ImageZoomOverlayContainer from '@/app/entities/common/Overlay/Image/ImageZoomOverlayContainer'; import useOverlay from '@/app/hooks/common/useOverlay'; +import useTheme from '@/app/hooks/useTheme'; +import MDEditor from '@uiw/react-md-editor'; interface Props { content: string; diff --git a/app/entities/post/detail/PostDetail.tsx b/app/entities/post/detail/PostDetail.tsx index d585aee..029883f 100644 --- a/app/entities/post/detail/PostDetail.tsx +++ b/app/entities/post/detail/PostDetail.tsx @@ -1,6 +1,6 @@ -import { Post as PostType } from '@/app/types/Post'; -import PostHeader from '@/app/entities/post/detail/PostHeader'; import PostBody from '@/app/entities/post/detail/PostBody'; +import PostHeader from '@/app/entities/post/detail/PostHeader'; +import { Post as PostType } from '@/app/types/Post'; interface PostArticleProps { post: PostType; diff --git a/app/entities/post/detail/PostRecommendation.tsx b/app/entities/post/detail/PostRecommendation.tsx index 6ec08a0..7a4618f 100644 --- a/app/entities/post/detail/PostRecommendation.tsx +++ b/app/entities/post/detail/PostRecommendation.tsx @@ -1,12 +1,12 @@ 'use client'; +import { FaBookmark } from 'react-icons/fa'; +import ErrorBox from '@/app/entities/common/Error/ErrorBox'; +import Skeleton from '@/app/entities/common/Skeleton/Skeleton'; +import PostRecommendationListItem from '@/app/entities/post/detail/PostRecommendationListItem'; import useDataFetch, { useDataFetchConfig, } from '@/app/hooks/common/useDataFetch'; import { Post } from '@/app/types/Post'; -import PostRecommendationListItem from '@/app/entities/post/detail/PostRecommendationListItem'; -import ErrorBox from '@/app/entities/common/Error/ErrorBox'; -import { FaBookmark } from 'react-icons/fa'; -import Skeleton from '@/app/entities/common/Skeleton/Skeleton'; interface PostRecommendationProps { tags: string[]; currentPostId: string; diff --git a/app/entities/post/detail/PostRecommendationListItem.tsx b/app/entities/post/detail/PostRecommendationListItem.tsx index 0181c60..d0d33cc 100644 --- a/app/entities/post/detail/PostRecommendationListItem.tsx +++ b/app/entities/post/detail/PostRecommendationListItem.tsx @@ -1,9 +1,9 @@ import { StaticImport } from 'next/dist/shared/lib/get-img-props'; -import { FC } from 'react'; -import Link from 'next/link'; import Image from 'next/image'; -import TagBox from '@/app/entities/post/tags/TagBox'; +import Link from 'next/link'; +import { FC } from 'react'; import { MdOutlineImageNotSupported } from 'react-icons/md'; +import TagBox from '@/app/entities/post/tags/TagBox'; interface PostRecommendationListItemProps { slug: string; diff --git a/app/entities/post/detail/PostTOC.tsx b/app/entities/post/detail/PostTOC.tsx index 95fc320..1891080 100644 --- a/app/entities/post/detail/PostTOC.tsx +++ b/app/entities/post/detail/PostTOC.tsx @@ -1,6 +1,6 @@ 'use client'; import Link from 'next/link'; -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FaBookBible, FaX } from 'react-icons/fa6'; const PostTOC = ({ postContent }: { postContent: string }) => { diff --git a/app/entities/post/list/PopularPosts.tsx b/app/entities/post/list/PopularPosts.tsx index 965411d..9346525 100644 --- a/app/entities/post/list/PopularPosts.tsx +++ b/app/entities/post/list/PopularPosts.tsx @@ -1,9 +1,9 @@ -import { useEffect, useState } from 'react'; -import { Post } from '@/app/types/Post'; import axios from 'axios'; import Image from 'next/image'; import Link from 'next/link'; +import { useEffect, useState } from 'react'; import { formatDate } from '@/app/lib/utils/format'; +import { Post } from '@/app/types/Post'; interface PostWithView extends Post { view: number; diff --git a/app/entities/post/list/PostList.tsx b/app/entities/post/list/PostList.tsx index d5acd64..8eed5eb 100644 --- a/app/entities/post/list/PostList.tsx +++ b/app/entities/post/list/PostList.tsx @@ -1,7 +1,7 @@ -import { Post } from '@/app/types/Post'; -import PostPreview from '@/app/entities/post/list/PostPreview'; import NotFound from '@/app/entities/common/Animation/NotFound'; import PostsGridSkeleton from '@/app/entities/common/Skeleton/PostsGridSkeleton'; +import PostPreview from '@/app/entities/post/list/PostPreview'; +import { Post } from '@/app/types/Post'; const PostList = (props: { query: string; diff --git a/app/entities/post/list/PostListItem.tsx b/app/entities/post/list/PostListItem.tsx index 6c26dfb..94c6daa 100644 --- a/app/entities/post/list/PostListItem.tsx +++ b/app/entities/post/list/PostListItem.tsx @@ -1,6 +1,6 @@ -import { Post } from '@/app/types/Post'; -import { FaPencil } from 'react-icons/fa6'; import { FaTrash } from 'react-icons/fa'; +import { FaPencil } from 'react-icons/fa6'; +import { Post } from '@/app/types/Post'; const PostListItem = (props: { post: Post; diff --git a/app/entities/post/list/PostPreview.tsx b/app/entities/post/list/PostPreview.tsx index ae50109..6eaa7b3 100644 --- a/app/entities/post/list/PostPreview.tsx +++ b/app/entities/post/list/PostPreview.tsx @@ -1,13 +1,13 @@ 'use client'; import Image from 'next/image'; -import example from '@/public/images/placeholder/thumbnail_example2.webp'; +import Link from 'next/link'; +import { useState } from 'react'; +import { AiOutlineLoading3Quarters } from 'react-icons/ai'; import Profile from '@/app/entities/common/Profile'; import Timestamp from '@/app/entities/common/Timestamp'; import { Post } from '@/app/types/Post'; -import { useState } from 'react'; -import { AiOutlineLoading3Quarters } from 'react-icons/ai'; -import Link from 'next/link'; +import example from '@/public/images/placeholder/thumbnail_example2.webp'; const PostPreview = ({ slug, diff --git a/app/entities/post/list/SearchSection.tsx b/app/entities/post/list/SearchSection.tsx index e873e17..adf972a 100644 --- a/app/entities/post/list/SearchSection.tsx +++ b/app/entities/post/list/SearchSection.tsx @@ -1,14 +1,14 @@ 'use client'; import { useEffect, useState } from 'react'; -import { FaBook, FaSearch } from 'react-icons/fa'; import { BiChevronDown } from 'react-icons/bi'; +import { FaBook, FaSearch } from 'react-icons/fa'; +import { RiRestartLine } from 'react-icons/ri'; import Overlay from '@/app/entities/common/Overlay/Overlay'; import SearchOverlayContainer from '@/app/entities/common/Overlay/Search/SearchOverlayContainer'; -import useSearchQueryStore from '@/app/stores/useSearchQueryStore'; import { getAllSeriesData } from '@/app/entities/series/api/series'; -import { Series } from '@/app/types/Series'; -import { RiRestartLine } from 'react-icons/ri'; import SeriesDropdownList from '@/app/entities/series/list/SeriesDropdownList'; +import useSearchQueryStore from '@/app/stores/useSearchQueryStore'; +import { Series } from '@/app/types/Series'; interface SearchSectionProps { query: string; diff --git a/app/entities/post/list/SeriesInnerPostListItem.tsx b/app/entities/post/list/SeriesInnerPostListItem.tsx index 63e36ff..f65af24 100644 --- a/app/entities/post/list/SeriesInnerPostListItem.tsx +++ b/app/entities/post/list/SeriesInnerPostListItem.tsx @@ -1,8 +1,8 @@ import { StaticImport } from 'next/dist/shared/lib/get-img-props'; -import Link from 'next/link'; import Image from 'next/image'; -import { MdOutlineImageNotSupported } from 'react-icons/md'; +import Link from 'next/link'; import { FaEyeSlash } from 'react-icons/fa'; +import { MdOutlineImageNotSupported } from 'react-icons/md'; interface SeriesPostListItemProps { slug: string; diff --git a/app/entities/post/write/UploadImageContainer.tsx b/app/entities/post/write/UploadImageContainer.tsx index 088d41f..6073b52 100644 --- a/app/entities/post/write/UploadImageContainer.tsx +++ b/app/entities/post/write/UploadImageContainer.tsx @@ -1,8 +1,8 @@ 'use client'; -import UploadedImage from '@/app/entities/post/write/UploadedImage'; +import { ChangeEvent, Dispatch, SetStateAction } from 'react'; import { FaImage } from 'react-icons/fa'; +import UploadedImage from '@/app/entities/post/write/UploadedImage'; import { upload } from '@vercel/blob/client'; -import { ChangeEvent, Dispatch, SetStateAction, useState } from 'react'; interface UploadImageContainerProps { onClick: (link: string) => void; diff --git a/app/entities/profile/AboutMe.tsx b/app/entities/profile/AboutMe.tsx index 77ef5f2..157071c 100644 --- a/app/entities/profile/AboutMe.tsx +++ b/app/entities/profile/AboutMe.tsx @@ -1,5 +1,5 @@ -import { FaGithub, FaLinkedin } from 'react-icons/fa'; import Image from 'next/image'; +import { FaGithub, FaLinkedin } from 'react-icons/fa'; import { githubLink, linkedinLink } from '@/app/lib/constants/landingPageData'; const AboutMe = () => { diff --git a/app/entities/profile/LatestArticles.tsx b/app/entities/profile/LatestArticles.tsx index 7f00a7d..75dd3f5 100644 --- a/app/entities/profile/LatestArticles.tsx +++ b/app/entities/profile/LatestArticles.tsx @@ -1,9 +1,9 @@ -import { Post } from '@/app/types/Post'; -import Skeleton from '../common/Skeleton/Skeleton'; -import Link from 'next/link'; +import { AxiosError } from 'axios'; import Image from 'next/image'; +import Link from 'next/link'; +import { Post } from '@/app/types/Post'; import ErrorBox from '../common/Error/ErrorBox'; -import { AxiosError } from 'axios'; +import Skeleton from '../common/Skeleton/Skeleton'; interface LatestArticlesProps { posts: Post[]; @@ -72,7 +72,7 @@ const LatestArticleSkeleton = () => { return (
diff --git a/app/entities/series/CreateSeriesOverlayContainer.tsx b/app/entities/series/CreateSeriesOverlayContainer.tsx index 0d0848c..38378d3 100644 --- a/app/entities/series/CreateSeriesOverlayContainer.tsx +++ b/app/entities/series/CreateSeriesOverlayContainer.tsx @@ -1,4 +1,4 @@ -import { ChangeEvent, useState } from 'react'; +import { useState } from 'react'; import { createSeries, updateSeries } from '@/app/entities/series/api/series'; import useToast from '@/app/hooks/useToast'; import { Series } from '@/app/types/Series'; diff --git a/app/entities/series/detail/SeriesDetailPostList.tsx b/app/entities/series/detail/SeriesDetailPostList.tsx index 9f315d5..871e96e 100644 --- a/app/entities/series/detail/SeriesDetailPostList.tsx +++ b/app/entities/series/detail/SeriesDetailPostList.tsx @@ -1,8 +1,8 @@ import { BiBook } from 'react-icons/bi'; import { FaChevronDown } from 'react-icons/fa'; import Select from '@/app/entities/common/Select'; -import { Post } from '@/app/types/Post'; import SeriesPostListItem from '@/app/entities/post/list/SeriesInnerPostListItem'; +import { Post } from '@/app/types/Post'; import { Series } from '@/app/types/Series'; interface SeriesDetailPostListProps { diff --git a/app/entities/series/list/AdminSeriesList.tsx b/app/entities/series/list/AdminSeriesList.tsx index 4cdd705..7e51b21 100644 --- a/app/entities/series/list/AdminSeriesList.tsx +++ b/app/entities/series/list/AdminSeriesList.tsx @@ -1,6 +1,6 @@ -import { Series } from '@/app/types/Series'; import React from 'react'; import AdminSeriesListItem from '@/app/entities/series/list/AdminSeriesListItem'; +import { Series } from '@/app/types/Series'; interface AdminSeriesListProps { seriesList: Series[] | null | undefined; diff --git a/app/entities/series/list/AdminSeriesListItem.tsx b/app/entities/series/list/AdminSeriesListItem.tsx index 33860bc..a16a6b3 100644 --- a/app/entities/series/list/AdminSeriesListItem.tsx +++ b/app/entities/series/list/AdminSeriesListItem.tsx @@ -1,7 +1,7 @@ -import { Series } from '@/app/types/Series'; import Image from 'next/image'; -import { FaBookOpen, FaCalendar } from 'react-icons/fa'; import React from 'react'; +import { FaBookOpen, FaCalendar } from 'react-icons/fa'; +import { Series } from '@/app/types/Series'; interface AdminSeriesListItemProps { series: Series; diff --git a/app/entities/series/list/SeriesDropdownList.tsx b/app/entities/series/list/SeriesDropdownList.tsx index 4ee9491..58defe0 100644 --- a/app/entities/series/list/SeriesDropdownList.tsx +++ b/app/entities/series/list/SeriesDropdownList.tsx @@ -1,5 +1,5 @@ -import { Series } from '@/app/types/Series'; import SeriesDropdownItem from '@/app/entities/series/SeriesDropdownItem'; +import { Series } from '@/app/types/Series'; interface SearchDropdownListProps { series: Series[] | null; diff --git a/app/entities/series/list/SeriesList.tsx b/app/entities/series/list/SeriesList.tsx index 59256f9..d203fe3 100644 --- a/app/entities/series/list/SeriesList.tsx +++ b/app/entities/series/list/SeriesList.tsx @@ -1,9 +1,9 @@ -import SeriesPreview from '@/app/entities/series/list/SeriesPreview'; import React, { useEffect, useState } from 'react'; -import { Series } from '@/app/types/Series'; import { FaBookOpen } from 'react-icons/fa'; -import { getAllSeriesData } from '@/app/entities/series/api/series'; import SeriesGridSkeleton from '@/app/entities/common/Skeleton/SeriesGridSkeleton'; +import { getAllSeriesData } from '@/app/entities/series/api/series'; +import SeriesPreview from '@/app/entities/series/list/SeriesPreview'; +import { Series } from '@/app/types/Series'; const SeriesList = () => { const [series, setSeries] = useState([]); diff --git a/app/entities/series/list/SeriesPreview.tsx b/app/entities/series/list/SeriesPreview.tsx index a96ff5f..3616621 100644 --- a/app/entities/series/list/SeriesPreview.tsx +++ b/app/entities/series/list/SeriesPreview.tsx @@ -1,8 +1,8 @@ import Image from 'next/image'; -import { FaBookOpen, FaCalendar } from 'react-icons/fa'; +import Link from 'next/link'; import React from 'react'; +import { FaBookOpen, FaCalendar } from 'react-icons/fa'; import { Series } from '@/app/types/Series'; -import Link from 'next/link'; interface SeriesPreviewProps { item: Series; diff --git a/app/hooks/common/useDataFetch.ts b/app/hooks/common/useDataFetch.ts index b36c4db..be2776d 100644 --- a/app/hooks/common/useDataFetch.ts +++ b/app/hooks/common/useDataFetch.ts @@ -1,5 +1,5 @@ -import { useCallback, useEffect, useState } from 'react'; import axios, { AxiosError, AxiosRequestConfig, Method } from 'axios'; +import { useCallback, useEffect, useState } from 'react'; export interface useDataFetchConfig { url: string; diff --git a/app/hooks/common/useURLSync.ts b/app/hooks/common/useURLSync.ts index e358553..75c1621 100644 --- a/app/hooks/common/useURLSync.ts +++ b/app/hooks/common/useURLSync.ts @@ -1,5 +1,5 @@ -import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; +import { useEffect } from 'react'; interface useURLSyncConfig { baseURL: string; diff --git a/app/hooks/post/usePost.ts b/app/hooks/post/usePost.ts index b1cf8c8..17d879c 100644 --- a/app/hooks/post/usePost.ts +++ b/app/hooks/post/usePost.ts @@ -1,14 +1,13 @@ -import { useEffect, useState } from 'react'; -import { StaticImport } from 'next/dist/shared/lib/get-img-props'; -import { Series } from '@/app/types/Series'; -import { PostBody } from '@/app/types/Post'; -import useToast from '@/app/hooks/useToast'; -import { getPostDetail } from '@/app/entities/post/api/postAPI'; -import { getAllSeriesData } from '@/app/entities/series/api/series'; import axios from 'axios'; +import { StaticImport } from 'next/dist/shared/lib/get-img-props'; import { useRouter } from 'next/navigation'; +import { useEffect, useState } from 'react'; +import { getAllSeriesData } from '@/app/entities/series/api/series'; import useDraft from '@/app/hooks/post/useDraft'; +import useToast from '@/app/hooks/useToast'; import { validatePost } from '@/app/lib/utils/validate/validate'; +import { PostBody } from '@/app/types/Post'; +import { Series } from '@/app/types/Series'; interface FormData { title: string; diff --git a/app/hooks/post/usePostSearch.ts b/app/hooks/post/usePostSearch.ts index 3077d7a..862c2ba 100644 --- a/app/hooks/post/usePostSearch.ts +++ b/app/hooks/post/usePostSearch.ts @@ -1,6 +1,6 @@ import { useState } from 'react'; -import useSearchQueryStore from '@/app/stores/useSearchQueryStore'; import useDebounce from '@/app/hooks/optimize/useDebounce'; +import useSearchQueryStore from '@/app/stores/useSearchQueryStore'; const usePostSearch = () => { const [query, setQuery] = useState(''); diff --git a/app/hooks/useFingerprint.ts b/app/hooks/useFingerprint.ts index 356a5f8..778f48a 100644 --- a/app/hooks/useFingerprint.ts +++ b/app/hooks/useFingerprint.ts @@ -1,6 +1,6 @@ 'use client'; -import useFingerprintStore from '@/app/stores/useFingerprintStore'; import { useEffect } from 'react'; +import useFingerprintStore from '@/app/stores/useFingerprintStore'; const useFingerprint = () => { const { fingerprint, initialize, isLoading, error } = useFingerprintStore(); diff --git a/app/hooks/useTheme.ts b/app/hooks/useTheme.ts index 2d0b247..58ab333 100644 --- a/app/hooks/useTheme.ts +++ b/app/hooks/useTheme.ts @@ -1,5 +1,5 @@ -import useThemeStore from '@/app/stores/useThemeStore'; import { useEffect } from 'react'; +import useThemeStore from '@/app/stores/useThemeStore'; const useTheme = () => { const { theme, setTheme } = useThemeStore(); diff --git a/app/hooks/useToast.ts b/app/hooks/useToast.ts index bbd5fb6..b8c4662 100644 --- a/app/hooks/useToast.ts +++ b/app/hooks/useToast.ts @@ -1,5 +1,5 @@ -import useToastStore from '@/app/stores/useToastStore'; import { useCallback, useEffect, useRef } from 'react'; +import useToastStore from '@/app/stores/useToastStore'; const useToast = () => { const { createToast, removeToast } = useToastStore(); diff --git a/app/layout.tsx b/app/layout.tsx index 95dd3e8..b0c89a5 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,8 +1,8 @@ import type { Metadata } from 'next'; import localFont from 'next/font/local'; import './globals.css'; -import Footer from '@/app/entities/common/Footer'; import React from 'react'; +import Footer from '@/app/entities/common/Footer'; import NavBar from '@/app/entities/common/NavBar'; import ToastProvider from '@/app/entities/common/Toast/ToastProvider'; import { GoogleAnalytics } from '@next/third-parties/google'; diff --git a/app/lib/rss.ts b/app/lib/rss.ts index 933e3bb..b52bfd2 100644 --- a/app/lib/rss.ts +++ b/app/lib/rss.ts @@ -1,6 +1,6 @@ -import { Feed } from 'feed'; import fs from 'fs'; import path from 'path'; +import { Feed } from 'feed'; export async function generateRssFeed(posts: any[]) { const site_url = process.env.NEXTAUTH_URL || 'http://localhost:3000'; diff --git a/app/middlewares/errorHandler.ts b/app/middlewares/errorHandler.ts index e2bdd30..b095ee6 100644 --- a/app/middlewares/errorHandler.ts +++ b/app/middlewares/errorHandler.ts @@ -1,6 +1,6 @@ // middleware/errorHandler.ts -import { createResponse } from '@/app/lib/api'; import { NextRequest } from 'next/server'; +import { createResponse } from '@/app/lib/api'; export const withErrorHandler = (handler: (req: NextRequest) => void) => async (req: NextRequest) => { diff --git a/app/migrate/generateDefaultSlug.ts b/app/migrate/generateDefaultSlug.ts index aebf77b..5c6f12a 100644 --- a/app/migrate/generateDefaultSlug.ts +++ b/app/migrate/generateDefaultSlug.ts @@ -1,7 +1,7 @@ // migration.js +import mongoose from 'mongoose'; import { generateUniqueSlug } from '@/app/lib/utils/post'; import Post from '@/app/models/Post'; -import mongoose from 'mongoose'; // MongoDB URI를 직접 입력하거나 환경변수에서 가져옵니다 const MONGODB_URI = process.env.DB_URI || '여기에_mongodb_uri를_입력하세요'; diff --git a/app/not-found.tsx b/app/not-found.tsx index fc2252f..a68a5ba 100644 --- a/app/not-found.tsx +++ b/app/not-found.tsx @@ -1,5 +1,5 @@ -import notfoundAnimation from '@/app/public/assets/notfound.json'; import LottiePlayer from '@/app/entities/common/Animation/LottiePlayer'; +import notfoundAnimation from '@/app/public/assets/notfound.json'; const NotFound = () => { return (
diff --git a/app/portfolio/[slug]/page.tsx b/app/portfolio/[slug]/page.tsx index 11ee5c7..6d0c38f 100644 --- a/app/portfolio/[slug]/page.tsx +++ b/app/portfolio/[slug]/page.tsx @@ -2,18 +2,18 @@ import Image from 'next/image'; import Link from 'next/link'; import { FaArrowLeft } from 'react-icons/fa'; -import NotFound from '@/app/not-found'; -import { PortfolioItem } from '@/app/types/Portfolio'; import { IoMdArrowDropleft, IoMdArrowDropright } from 'react-icons/io'; -import useDataFetch, { - useDataFetchConfig, -} from '@/app/hooks/common/useDataFetch'; +import ProjectChallenges from '@/app/entities/portfolio/detail/ProjectChallenges'; +import ProjectLinks from '@/app/entities/portfolio/detail/ProjectLinks'; import ProjectOverview from '@/app/entities/portfolio/detail/ProjectOverview'; import ProjectScreenshots from '@/app/entities/portfolio/detail/ProjectScreenshots'; -import ProjectChallenges from '@/app/entities/portfolio/detail/ProjectChallenges'; import ProjectSummary from '@/app/entities/portfolio/detail/ProjectSummary'; import useCarousel from '@/app/hooks/common/useCarousel'; -import ProjectLinks from '@/app/entities/portfolio/detail/ProjectLinks'; +import useDataFetch, { + useDataFetchConfig, +} from '@/app/hooks/common/useDataFetch'; +import NotFound from '@/app/not-found'; +import { PortfolioItem } from '@/app/types/Portfolio'; interface PortfolioDetailPageProps { params: { diff --git a/app/portfolio/page.tsx b/app/portfolio/page.tsx index 3f59e1e..efbdc5f 100644 --- a/app/portfolio/page.tsx +++ b/app/portfolio/page.tsx @@ -1,5 +1,5 @@ -import { projects } from '@/app/portfolio/data'; import PortfolioStoneGrid from '@/app/entities/portfolio/PortfolioStoneGrid'; +import { projects } from '@/app/portfolio/data'; const PortfolioPage = () => { return ( diff --git a/app/posts/[slug]/page.tsx b/app/posts/[slug]/page.tsx index c60356d..76ef8bd 100644 --- a/app/posts/[slug]/page.tsx +++ b/app/posts/[slug]/page.tsx @@ -1,12 +1,12 @@ -import Comments from '@/app/entities/comment/Comments'; import { Metadata } from 'next'; -import dbConnect from '@/app/lib/dbConnect'; -import Post from '@/app/models/Post'; -import PostJSONLd from '@/app/entities/post/detail/PostJSONLd'; +import { getServerSession } from 'next-auth'; +import Comments from '@/app/entities/comment/Comments'; import PostActionSection from '@/app/entities/post/detail/PostActionSection'; -import PostRecommendation from '@/app/entities/post/detail/PostRecommendation'; import PostDetail from '@/app/entities/post/detail/PostDetail'; -import { getServerSession } from 'next-auth'; +import PostJSONLd from '@/app/entities/post/detail/PostJSONLd'; +import PostRecommendation from '@/app/entities/post/detail/PostRecommendation'; +import dbConnect from '@/app/lib/dbConnect'; +import Post from '@/app/models/Post'; const defaultThumbnail = '/images/placeholder/thumbnail_example2.webp'; diff --git a/app/posts/page.tsx b/app/posts/page.tsx index b8a69ea..4066d8d 100644 --- a/app/posts/page.tsx +++ b/app/posts/page.tsx @@ -1,17 +1,17 @@ 'use client'; +import { useRouter, useSearchParams } from 'next/navigation'; import { useMemo, useState } from 'react'; -import { Post } from '@/app/types/Post'; +import Pagination from '@/app/entities/common/Pagination'; import PostList from '@/app/entities/post/list/PostList'; import SearchSection from '@/app/entities/post/list/SearchSection'; -import { useRouter, useSearchParams } from 'next/navigation'; -import Pagination from '@/app/entities/common/Pagination'; import useDataFetch, { useDataFetchConfig, } from '@/app/hooks/common/useDataFetch'; -import ErrorBox from '../entities/common/Error/ErrorBox'; import useURLSync from '@/app/hooks/common/useURLSync'; import usePostSearch from '@/app/hooks/post/usePostSearch'; import useToast from '@/app/hooks/useToast'; +import { Post } from '@/app/types/Post'; +import ErrorBox from '../entities/common/Error/ErrorBox'; interface PaginationData { totalPosts: number; diff --git a/app/rss/route.ts b/app/rss/route.ts index 023ffdf..3705e4e 100644 --- a/app/rss/route.ts +++ b/app/rss/route.ts @@ -1,6 +1,6 @@ -import { NextResponse } from 'next/server'; import fs from 'fs'; import path from 'path'; +import { NextResponse } from 'next/server'; export async function GET() { try { diff --git a/app/series/[slug]/page.tsx b/app/series/[slug]/page.tsx index 46aab01..e6045ac 100644 --- a/app/series/[slug]/page.tsx +++ b/app/series/[slug]/page.tsx @@ -1,14 +1,14 @@ 'use client'; -import useDataFetch, { - useDataFetchConfig, -} from '@/app/hooks/common/useDataFetch'; -import SVGLoadingSpinner from '@/app/entities/common/Loading/SVGLoadingSpinner'; -import ErrorBox from '@/app/entities/common/Error/ErrorBox'; -import { FaArrowLeft } from 'react-icons/fa'; import Link from 'next/link'; import { useState } from 'react'; +import { FaArrowLeft } from 'react-icons/fa'; +import ErrorBox from '@/app/entities/common/Error/ErrorBox'; +import SVGLoadingSpinner from '@/app/entities/common/Loading/SVGLoadingSpinner'; import SeriesDetailHeader from '@/app/entities/series/detail/SeriesDetailHeader'; import SeriesDetailPostList from '@/app/entities/series/detail/SeriesDetailPostList'; +import useDataFetch, { + useDataFetchConfig, +} from '@/app/hooks/common/useDataFetch'; interface SeriesDetailPageProps { params: { diff --git a/app/series/page.tsx b/app/series/page.tsx index f61d269..4a480ec 100644 --- a/app/series/page.tsx +++ b/app/series/page.tsx @@ -1,7 +1,6 @@ 'use client'; -import React, { Suspense } from 'react'; +import React from 'react'; import SeriesList from '@/app/entities/series/list/SeriesList'; -import SeriesGridSkeleton from '@/app/entities/common/Skeleton/SeriesGridSkeleton'; const SeriesListPage = () => { return ( diff --git a/app/stores/post/useDraftStore.ts b/app/stores/post/useDraftStore.ts index 34feaa4..489e19a 100644 --- a/app/stores/post/useDraftStore.ts +++ b/app/stores/post/useDraftStore.ts @@ -1,6 +1,6 @@ -import { Post } from '@/app/types/Post'; import { create } from 'zustand'; import { persist } from 'zustand/middleware'; +import { Post } from '@/app/types/Post'; interface DraftStoreState { draft: Partial | null;