Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/app/designer/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ReactNode } from "react";

import Header from "@/components/common/Header";
import Sidebar from "@/components/common/Sidebar";
import SidebarMenu from "@/components/common/SidebarMenu";
import Header from "@/shared/ui/Header";
import Sidebar from "@/shared/ui/Sidebar";
import SidebarMenu from "@/shared/ui/SidebarMenu";

const DesignerLayout = ({ children }: { children: ReactNode }) => {
return (
Expand Down
6 changes: 3 additions & 3 deletions src/app/instructor/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ReactNode } from "react";

import Header from "@/components/common/Header";
import Sidebar from "@/components/common/Sidebar";
import SidebarMenu from "@/components/common/SidebarMenu";
import Header from "@/shared/ui/Header";
import Sidebar from "@/shared/ui/Sidebar";
import SidebarMenu from "@/shared/ui/SidebarMenu";

const InstructorLayout = ({ children }: { children: ReactNode }) => {
return (
Expand Down
8 changes: 5 additions & 3 deletions src/app/instructor/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import DraftSubmissionStatusSection from "@/containers/instructor/home/DraftSubmissionStatusSection";
import MatchingCommissionsSection from "@/containers/instructor/home/MatchingCommissionsSection";
import ModifyingCommissionsSection from "@/containers/instructor/home/ModifyingCommissionsSection";
import {
DraftSubmissionStatusSection,
MatchingCommissionsSection,
ModifyingCommissionsSection,
} from "@/widgets/instructor/home";

const page = () => {
return (
Expand Down
3 changes: 1 addition & 2 deletions src/app/instructor/write/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import { ReactNode, useEffect } from "react";

import StepHeader from "@/components/instructor/write/StepHeader";
import { useWriteFormStore } from "@/store/writeFormStore";
import { StepHeader, useWriteFormStore } from "@/features/instructor/write";

const WriteLayout = ({ children }: { children: ReactNode }) => {
const clearAfterSubmit = useWriteFormStore(s => s.clearAfterSubmit);
Expand Down
8 changes: 3 additions & 5 deletions src/app/instructor/write/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";

import Modal from "@/components/common/Modal";
import Step1Content from "@/containers/instructor/write/Steps/Step1Content";
import Step2Content from "@/containers/instructor/write/Steps/Step2Content";
import Step3Content from "@/containers/instructor/write/Steps/Step3Content";
import { useWriteFormStore } from "@/store/writeFormStore";
import { useWriteFormStore } from "@/features/instructor/write";
import Modal from "@/shared/ui/Modal";
import { Step1Content, Step2Content, Step3Content } from "@/widgets/instructor/write";

const WritePageContent = () => {
const { currentStep } = useWriteFormStore();
Expand Down
2 changes: 1 addition & 1 deletion src/app/login/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ReactNode } from "react";

import Header from "@/components/common/Header";
import Header from "@/shared/ui/Header";

const LoginLayout = ({ children }: { children: ReactNode }) => {
return (
Expand Down
6 changes: 3 additions & 3 deletions src/app/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import Link from "next/link";
import { useState } from "react";

import { BlackLogo } from "@/assets/logos";
import Button from "@/components/common/Button";
import InputField from "@/components/common/input/InputField";
import { BlackLogo } from "@/shared/assets/logos";
import Button from "@/shared/ui/Button";
import InputField from "@/shared/ui/input/InputField";

const Page = () => {
const [loginId, setLoginId] = useState("");
Expand Down
13 changes: 9 additions & 4 deletions src/app/signup/designer/step1/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@
import { useRouter } from "next/navigation";
import { type ChangeEvent, useState } from "react";

import { CheckboxFillIcon, CheckboxGrayIcon, CloseIcon, StepOneDesignerIcon } from "@/assets/icons";
import Button from "@/components/common/Button";
import InputField from "@/components/common/input/InputField";
import {
DESIGNER_TERMS,
SIGNUP_MAX_NAME_LENGTH,
SIGNUP_MAX_PHONE_NUMBER_LENGTH,
} from "@/constants/signup";
} from "@/features/signup";
import {
CheckboxFillIcon,
CheckboxGrayIcon,
CloseIcon,
StepOneDesignerIcon,
} from "@/shared/assets/icons";
import Button from "@/shared/ui/Button";
import InputField from "@/shared/ui/input/InputField";

type DesignerTermsId = (typeof DESIGNER_TERMS)[number]["id"];

Expand Down
13 changes: 8 additions & 5 deletions src/app/signup/designer/step2/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import { useRouter } from "next/navigation";

import { StepTwoDesignerIcon } from "@/assets/icons";
import Button from "@/components/common/Button";
import InputField from "@/components/common/input/InputField";
import { SIGNUP_MAX_ID_LENGTH, SIGNUP_MAX_PASSWORD_LENGTH } from "@/constants/signup";
import { useSignupStep2Form } from "@/lib/hooks/useSignupStep2Form";
import {
SIGNUP_MAX_ID_LENGTH,
SIGNUP_MAX_PASSWORD_LENGTH,
useSignupStep2Form,
} from "@/features/signup";
import { StepTwoDesignerIcon } from "@/shared/assets/icons";
import Button from "@/shared/ui/Button";
import InputField from "@/shared/ui/input/InputField";

const Page = () => {
const router = useRouter();
Expand Down
15 changes: 7 additions & 8 deletions src/app/signup/designer/step3/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
import { useRouter } from "next/navigation";
import { type ChangeEvent, useState } from "react";

import { StepThreeDesignerIcon } from "@/assets/icons";
import Button from "@/components/common/Button";
import BankDropdown from "@/components/common/dropdown/BankDropdown";
import FileDragAndDrop from "@/components/common/FileDragAndDrop";
import FileUpload from "@/components/common/FileUpload";
import InputField from "@/components/common/input/InputField";
import { type BankCode, type BankOption } from "@/constants/signup";
import { useUploadedFiles } from "@/lib/hooks/useUploadedFiles";
import { type BankCode, BankDropdown, type BankOption } from "@/features/signup";
import { StepThreeDesignerIcon } from "@/shared/assets/icons";
import { useUploadedFiles } from "@/shared/lib/hooks/useUploadedFiles";
import Button from "@/shared/ui/Button";
import FileDragAndDrop from "@/shared/ui/FileDragAndDrop";
import FileUpload from "@/shared/ui/FileUpload";
import InputField from "@/shared/ui/input/InputField";

const PORTFOLIO_MAX_FILE_COUNT = 3;
const PORTFOLIO_ALLOWED_EXTENSIONS = [".pdf", ".png"];
Expand Down
16 changes: 8 additions & 8 deletions src/app/signup/instructor/step1/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
import { useRouter } from "next/navigation";
import { type ChangeEvent, useState } from "react";

import {
INSTRUCTOR_TERMS,
SIGNUP_MAX_NAME_LENGTH,
SIGNUP_MAX_PHONE_NUMBER_LENGTH,
} from "@/features/signup";
import {
CheckboxFillIcon,
CheckboxGrayIcon,
CloseIcon,
StepOneInstructorIcon,
} from "@/assets/icons";
import Button from "@/components/common/Button";
import InputField from "@/components/common/input/InputField";
import {
INSTRUCTOR_TERMS,
SIGNUP_MAX_NAME_LENGTH,
SIGNUP_MAX_PHONE_NUMBER_LENGTH,
} from "@/constants/signup";
} from "@/shared/assets/icons";
import Button from "@/shared/ui/Button";
import InputField from "@/shared/ui/input/InputField";

type InstructorTermsId = (typeof INSTRUCTOR_TERMS)[number]["id"];

Expand Down
13 changes: 8 additions & 5 deletions src/app/signup/instructor/step2/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import { useRouter } from "next/navigation";

import { StepTwoInstructorIcon } from "@/assets/icons";
import Button from "@/components/common/Button";
import InputField from "@/components/common/input/InputField";
import { SIGNUP_MAX_ID_LENGTH, SIGNUP_MAX_PASSWORD_LENGTH } from "@/constants/signup";
import { useSignupStep2Form } from "@/lib/hooks/useSignupStep2Form";
import {
SIGNUP_MAX_ID_LENGTH,
SIGNUP_MAX_PASSWORD_LENGTH,
useSignupStep2Form,
} from "@/features/signup";
import { StepTwoInstructorIcon } from "@/shared/assets/icons";
import Button from "@/shared/ui/Button";
import InputField from "@/shared/ui/input/InputField";

const Page = () => {
const router = useRouter();
Expand Down
2 changes: 1 addition & 1 deletion src/app/signup/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ReactNode } from "react";

import Header from "@/components/common/Header";
import Header from "@/shared/ui/Header";

const SignupLayout = ({ children }: { children: ReactNode }) => {
return (
Expand Down
6 changes: 3 additions & 3 deletions src/app/signup/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import { useRouter } from "next/navigation";
import { useState } from "react";

import { UserTypeDesignerIcon, UserTypeInstructorIcon } from "@/assets/icons";
import Button from "@/components/common/Button";
import UserTypeBtn from "@/components/signup/UserTypeBtn";
import { UserTypeBtn } from "@/features/signup";
import { UserTypeDesignerIcon, UserTypeInstructorIcon } from "@/shared/assets/icons";
import Button from "@/shared/ui/Button";

type UserType = "designer" | "instructor";

Expand Down
42 changes: 0 additions & 42 deletions src/assets/icons/index.ts

This file was deleted.

2 changes: 0 additions & 2 deletions src/assets/logos/index.ts

This file was deleted.

16 changes: 16 additions & 0 deletions src/features/instructor/home/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export { getDDay } from "@/features/instructor/home/lib/getDDay";
export type {
DraftSubmissionItem,
MatchingItem,
ModifyingItem,
} from "@/features/instructor/home/model/home";
export {
CATEGORY_DISPLAY_MAP,
draftSubmissionStatusData,
matchingStatusData,
modifyingStatusData,
} from "@/features/instructor/home/model/home";
export { default as CommissionsHeader } from "@/features/instructor/home/ui/CommissionsHeader";
export { default as DraftSubmissionStatusRow } from "@/features/instructor/home/ui/DraftSubmissionStatusRow";
export { default as MatchingCommissionsRow } from "@/features/instructor/home/ui/MatchingCommissionsRow";
export { default as ModifyingCommissionsRow } from "@/features/instructor/home/ui/ModifyingCommissionsRow";
8 changes: 8 additions & 0 deletions src/features/instructor/home/lib/getDDay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const getDDay = (deadline: string) => {
const today = new Date();
today.setHours(0, 0, 0, 0);
const target = new Date(deadline);
target.setHours(0, 0, 0, 0);
const diff = Math.ceil((target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));
return diff >= 0 ? `D-${diff}` : `D+${Math.abs(diff)}`;
Comment on lines +4 to +7

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

유효하지 않은 날짜 입력 시 D+NaN이 반환됩니다.

new Date(deadline)가 Invalid Date인 경우 현재 분기에서 그대로 문자열이 만들어져 잘못된 D-Day가 노출됩니다. Number.isNaN(target.getTime()) 검증 후 안전한 fallback(예: "-" 반환 또는 예외 처리)을 넣어 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/instructor/home/lib/getDDay.ts` around lines 4 - 7, The getDDay
function currently constructs target = new Date(deadline) and computes diff
without checking for invalid dates; add a validation after creating target (use
Number.isNaN(target.getTime())) and if invalid return a safe fallback (e.g., "-"
) or throw an error, otherwise continue computing diff and returning
`D-{n}`/`D+{n}` using the existing target, today, and diff logic; update any
callers/tests if they expect the previous string.

};
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ArrowRightIcon, MatchingOffIcon, MatchingOnIcon } from "@/assets/icons";
import Tag from "@/components/common/Tag";
import { CATEGORY_DISPLAY_MAP, DraftSubmissionItem } from "@/data/instructor/home";
import { getDDay } from "@/lib/utils/date";
import { getDDay } from "@/features/instructor/home/lib/getDDay";
import { CATEGORY_DISPLAY_MAP, DraftSubmissionItem } from "@/features/instructor/home/model/home";
import { ArrowRightIcon, MatchingOffIcon, MatchingOnIcon } from "@/shared/assets/icons";
import Tag from "@/shared/ui/Tag";

const DraftSubmissionStatusRow = ({ item }: { item: DraftSubmissionItem }) => {
const { title, category, draftSubmission, firstDraftDeadline } = item;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ArrowRightIcon } from "@/assets/icons";
import Tag from "@/components/common/Tag";
import { MatchingItem } from "@/data/instructor/home";
import { getDDay } from "@/lib/utils/date";
import { getDDay } from "@/features/instructor/home/lib/getDDay";
import { MatchingItem } from "@/features/instructor/home/model/home";
import { ArrowRightIcon } from "@/shared/assets/icons";
import Tag from "@/shared/ui/Tag";

const MatchingCommissionsRow = ({ item }: { item: MatchingItem }) => {
const { title, finalDeadline, matching } = item;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Button from "@/components/common/Button";
import Tag from "@/components/common/Tag";
import { ModifyingItem } from "@/data/instructor/home";
import { cn } from "@/lib/utils/cn";
import { getDDay } from "@/lib/utils/date";
import { getDDay } from "@/features/instructor/home/lib/getDDay";
import { ModifyingItem } from "@/features/instructor/home/model/home";
import { cn } from "@/shared/lib/utils/cn";
import Button from "@/shared/ui/Button";
import Tag from "@/shared/ui/Tag";

const ModifyingCommissionsRow = ({ item }: { item: ModifyingItem }) => {
const { title, finalDeadline, isSubmitted, hasUpdate } = item;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from "react";

import { OneCircleIcon, ThreeCircleIcon, TwoCircleIcon } from "@/assets/icons";
import { BadgeVariant } from "@/components/common/Badge";
import { OneCircleIcon, ThreeCircleIcon, TwoCircleIcon } from "@/shared/assets/icons";
import { BadgeVariant } from "@/shared/ui/Badge";

export type WriteStep = 1 | 2 | 3;

Expand Down
13 changes: 13 additions & 0 deletions src/features/instructor/write/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export * from "@/features/instructor/write/config/write";
export type { RgbaColor } from "@/features/instructor/write/lib/color";
export { formatDate, getMinFinalDate, getYesterday } from "@/features/instructor/write/lib/date";
export type { BasicInfo } from "@/features/instructor/write/model/writeFormStore";
export { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore";
export { default as ColorChooseCard } from "@/features/instructor/write/ui/ColorChooseCard";
export { default as ColorPicker } from "@/features/instructor/write/ui/ColorPicker";
export { default as ConceptKeywordCard } from "@/features/instructor/write/ui/ConceptKeywordCard";
export { default as PaperSizeCard } from "@/features/instructor/write/ui/PaperSizeCard";
export { default as PaymentModal } from "@/features/instructor/write/ui/PaymentModal/PaymentModal";
export { default as PlanChooseCard } from "@/features/instructor/write/ui/PlanChooseCard";
export { default as SizeRecommendedCard } from "@/features/instructor/write/ui/SizeRecommendedCard";
export { default as StepHeader } from "@/features/instructor/write/ui/StepHeader";
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,3 @@ export const toApiDate = (date: Date) => {
const d = String(date.getDate()).padStart(2, "0");
return `${y}-${m}-${d}`;
};

export const getDDay = (deadline: string) => {
const today = new Date();
today.setHours(0, 0, 0, 0);
const target = new Date(deadline);
target.setHours(0, 0, 0, 0);
const diff = Math.ceil((target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));
return diff >= 0 ? `D-${diff}` : `D+${Math.abs(diff)}`;
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { PageType } from "@/constants/write";
import { PageType } from "@/features/instructor/write/config/write";

export interface WriteOrderColorRequest {
role: "MAIN" | "SUB1" | "SUB2";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import {
type PlanType,
SIZE_API_MAP,
type WriteStep,
} from "@/constants/write";
import { type RgbaColor, toHex } from "@/lib/utils/color";
import { toApiDate } from "@/lib/utils/date";
import type { UploadedFile } from "@/types/file";
import type { WriteOrderRequest } from "@/types/write";
} from "@/features/instructor/write/config/write";
import { type RgbaColor, toHex } from "@/features/instructor/write/lib/color";
import { toApiDate } from "@/features/instructor/write/lib/date";
import type { WriteOrderRequest } from "@/features/instructor/write/model/write";
import type { UploadedFile } from "@/shared/types/file";

const STORAGE_KEY = "write-form";

Expand Down
Loading
Loading