diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f40718eb..106a74bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -86,7 +86,7 @@ jobs: - uses: actions/setup-node@v3 - uses: oven-sh/setup-bun@v2 - run: make prepare-deploy-web - - run: test `ls web/dist | wc -l` != 0 + - run: test `ls web/out | wc -l` != 0 deploy-test-server: name: Deploy Test (server) diff --git a/Makefile b/Makefile index d70acbf8..bee23e3a 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,6 @@ setup: if [ ! `command -v bun` ]; then echo 'ERR: Bun is required!'; exit 1; fi make sync bunx husky - cd web; if [ ! -f .env ]; then cp ./.env.sample ./.env ; fi - cd server; if [ ! -f .env.dev ]; then cp ./.env.sample ./.env.dev ; fi @echo "auto setup is done. now do:" @echo "- edit server/.env.dev" @echo "- edit web/.env" diff --git a/web/api/chat/chat.ts b/web/api/chat/chat.ts index a574b973..c8d5dc4b 100644 --- a/web/api/chat/chat.ts +++ b/web/api/chat/chat.ts @@ -9,13 +9,13 @@ import type { SharedRoom, UpdateRoom, UserID, -} from "../../../common/types"; -import { ErrUnauthorized, credFetch } from "../../firebase/auth/lib"; +} from "~/common/types"; +import { ErrUnauthorized, credFetch } from "~/firebase/auth/lib"; import endpoints from "../internal/endpoints"; /* TODO -import { UserID } from "../common/types"; -import type { User } from "../common/types"; +import { UserID } from "~/common/types"; +import type { User } from "~/common/types"; */ //// DM グループチャット 共通//// diff --git a/web/api/chat/hooks.ts b/web/api/chat/hooks.ts index d835cb9c..009eebed 100644 --- a/web/api/chat/hooks.ts +++ b/web/api/chat/hooks.ts @@ -3,11 +3,11 @@ import { useCallback } from "react"; import { z } from "zod"; // import { useCallback, useEffect, useState } from "react"; -import type { Message, RoomOverview } from "../../../common/types"; -import { MessageSchema, RoomOverviewSchema } from "../../../common/zod/schemas"; -import { type Hook, useCustomizedSWR } from "../../hooks/useCustomizedSWR"; +import type { Message, RoomOverview } from "~/common/types"; +import { MessageSchema, RoomOverviewSchema } from "~/common/zod/schemas"; +import { type Hook, useCustomizedSWR } from "~/hooks/useCustomizedSWR"; import type { UserID } from "../internal/endpoints"; -// import type { Hook } from "../share/types"; +// import type { Hook } from "~/share/types"; import * as chat from "./chat"; const OverviewListSchema = z.array(RoomOverviewSchema); diff --git a/web/api/course.hook.ts b/web/api/course.hook.ts index 509c2169..086d8b1c 100644 --- a/web/api/course.hook.ts +++ b/web/api/course.hook.ts @@ -1,7 +1,7 @@ import { z } from "zod"; -import type { Course } from "../../common/types"; -import { CourseSchema } from "../../common/zod/schemas"; -import { type Hook, useCustomizedSWR } from "../hooks/useCustomizedSWR"; +import type { Course } from "~/common/types"; +import { CourseSchema } from "~/common/zod/schemas"; +import { type Hook, useCustomizedSWR } from "~/hooks/useCustomizedSWR"; import { getMyCourses } from "./course"; const CourseListSchema = z.array(CourseSchema); diff --git a/web/api/course.ts b/web/api/course.ts index 17bba9bf..8a09b707 100644 --- a/web/api/course.ts +++ b/web/api/course.ts @@ -1,5 +1,5 @@ -import type { Course, CourseID, Day } from "../../common/types"; -import { credFetch } from "../firebase/auth/lib"; +import type { Course, CourseID, Day } from "~/common/types"; +import { credFetch } from "~/firebase/auth/lib"; import endpoints from "./internal/endpoints"; // TODO: migrate to safe functions diff --git a/web/api/internal/endpoints.ts b/web/api/internal/endpoints.ts index 53fc770a..1aa12839 100644 --- a/web/api/internal/endpoints.ts +++ b/web/api/internal/endpoints.ts @@ -1,5 +1,5 @@ -import type { CourseID, Day, GUID } from "../../../common/types"; -import type { MessageID, ShareRoomID } from "../../../common/types"; +import type { CourseID, Day, GUID } from "~/common/types"; +import type { MessageID, ShareRoomID } from "~/common/types"; export const origin: string | null = process.env.NEXT_PUBLIC_API_ENDPOINT ?? ""; if (!origin) throw new Error("process.env.NEXT_PUBLIC_API_ENDPOINT not found!"); diff --git a/web/api/internal/fetch-func.ts b/web/api/internal/fetch-func.ts index 2ef45789..a2dc1aee 100644 --- a/web/api/internal/fetch-func.ts +++ b/web/api/internal/fetch-func.ts @@ -1,4 +1,4 @@ -import { Err, Ok, type Result } from "../../../common/lib/result"; +import { Err, Ok, type Result } from "~/common/lib/result"; export async function safeFetch( path: string, @@ -15,7 +15,7 @@ export async function safeFetch( } } -import { getIdToken } from "../../firebase/auth/lib"; +import { getIdToken } from "~/firebase/auth/lib"; import endpoints from "./endpoints"; type URL = string; diff --git a/web/api/match.ts b/web/api/match.ts index f9496afe..0751c11f 100644 --- a/web/api/match.ts +++ b/web/api/match.ts @@ -1,4 +1,4 @@ -import { credFetch } from "../firebase/auth/lib"; +import { credFetch } from "~/firebase/auth/lib"; import endpoints from "./internal/endpoints"; import type { UserID } from "./internal/endpoints"; diff --git a/web/api/request.ts b/web/api/request.ts index efb20dcb..aaecadad 100644 --- a/web/api/request.ts +++ b/web/api/request.ts @@ -1,4 +1,4 @@ -import { credFetch } from "../firebase/auth/lib"; +import { credFetch } from "~/firebase/auth/lib"; import endpoints, { type UserID } from "./internal/endpoints"; //指定したユーザにリクエストを送る diff --git a/web/api/user.ts b/web/api/user.ts index 8f61ff2a..7ad033b0 100644 --- a/web/api/user.ts +++ b/web/api/user.ts @@ -1,10 +1,10 @@ import { z } from "zod"; -import type { GUID, UpdateUser, User, UserID } from "../../common/types.ts"; -import { parseUser } from "../../common/zod/methods.ts"; -import { UserIDSchema, UserSchema } from "../../common/zod/schemas.ts"; -import { credFetch } from "../firebase/auth/lib.ts"; -import { type Hook, useCustomizedSWR } from "../hooks/useCustomizedSWR.ts"; -import { useAuthorizedData } from "../hooks/useData.ts"; +import type { GUID, UpdateUser, User, UserID } from "~/common/types.ts"; +import { parseUser } from "~/common/zod/methods.ts"; +import { UserIDSchema, UserSchema } from "~/common/zod/schemas.ts"; +import { credFetch } from "~/firebase/auth/lib.ts"; +import { type Hook, useCustomizedSWR } from "~/hooks/useCustomizedSWR.ts"; +import { useAuthorizedData } from "~/hooks/useData.ts"; import endpoints from "./internal/endpoints.ts"; import type { Hook as UseHook } from "./share/types.ts"; diff --git a/web/app/chat/layout.tsx b/web/app/chat/layout.tsx index 6925d366..49f79339 100644 --- a/web/app/chat/layout.tsx +++ b/web/app/chat/layout.tsx @@ -1,6 +1,6 @@ import { Box } from "@mui/material"; -import BottomBar from "../../components/BottomBar"; -import Header from "../../components/Header"; +import BottomBar from "~/components/BottomBar"; +import Header from "~/components/Header"; export default function ChatPageLayout({ children, diff --git a/web/app/chat/page.tsx b/web/app/chat/page.tsx index e24b11ce..09c0b7c7 100644 --- a/web/app/chat/page.tsx +++ b/web/app/chat/page.tsx @@ -3,11 +3,11 @@ import { Typography } from "@mui/material"; import { useSearchParams } from "next/navigation"; import { Suspense } from "react"; -import { useRoomsOverview } from "../../api/chat/hooks"; -import RoomList from "../../components/chat/RoomList"; -import { RoomWindow } from "../../components/chat/RoomWindow"; -import FullScreenCircularProgress from "../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../components/common/NavigateByAuthState"; +import { useRoomsOverview } from "~/api/chat/hooks"; +import RoomList from "~/components/chat/RoomList"; +import { RoomWindow } from "~/components/chat/RoomWindow"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; function ChatListContent() { const searchParams = useSearchParams(); diff --git a/web/app/edit/courses/page.tsx b/web/app/edit/courses/page.tsx index 8fc3ec09..b4b9b9b2 100644 --- a/web/app/edit/courses/page.tsx +++ b/web/app/edit/courses/page.tsx @@ -2,10 +2,10 @@ import { Box, Button, Typography } from "@mui/material"; import Link from "next/link"; -import { useAboutMe } from "../../../api/user"; -import FullScreenCircularProgress from "../../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import EditableCoursesTable from "../../../components/course/EditableCoursesTable"; +import { useAboutMe } from "~/api/user"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import EditableCoursesTable from "~/components/course/EditableCoursesTable"; export default function EditCourses() { const { state } = useAboutMe(); diff --git a/web/app/edit/layout.tsx b/web/app/edit/layout.tsx index adb4ac22..7a6df71e 100644 --- a/web/app/edit/layout.tsx +++ b/web/app/edit/layout.tsx @@ -1,5 +1,5 @@ import { Box } from "@mui/material"; -import Header from "../../components/Header"; +import Header from "~/components/Header"; export default function EditPageLayout({ children, diff --git a/web/app/edit/profile/page.tsx b/web/app/edit/profile/page.tsx index 1f259962..2e0f34e1 100644 --- a/web/app/edit/profile/page.tsx +++ b/web/app/edit/profile/page.tsx @@ -16,16 +16,16 @@ import type { SelectChangeEvent } from "@mui/material"; import { useRouter } from "next/navigation"; import { enqueueSnackbar } from "notistack"; import { useEffect, useState } from "react"; -import { update, useAboutMe } from "../../../api/user"; -import type { UpdateUser } from "../../../common/types"; -import { UpdateUserSchema } from "../../../common/zod/schemas"; -import FullScreenCircularProgress from "../../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import { useAlert } from "../../../components/common/alert/AlertProvider"; -import PhotoModal from "../../../components/config/PhotoModal"; -import { PhotoPreviewButton } from "../../../components/config/PhotoPreview"; -import UserAvatar from "../../../components/human/avatar"; -import { facultiesAndDepartments } from "../../signup/data"; +import { update, useAboutMe } from "~/api/user"; +import { facultiesAndDepartments } from "~/app/signup/data"; +import type { UpdateUser } from "~/common/types"; +import { UpdateUserSchema } from "~/common/zod/schemas"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import { useAlert } from "~/components/common/alert/AlertProvider"; +import PhotoModal from "~/components/config/PhotoModal"; +import { PhotoPreviewButton } from "~/components/config/PhotoPreview"; +import UserAvatar from "~/components/human/avatar"; export default function EditProfile() { const router = useRouter(); diff --git a/web/app/faq/page.tsx b/web/app/faq/page.tsx index 459fb382..16184255 100644 --- a/web/app/faq/page.tsx +++ b/web/app/faq/page.tsx @@ -3,7 +3,7 @@ import { ArrowBack } from "@mui/icons-material"; import { Box, IconButton, Typography } from "@mui/material"; import { useRouter } from "next/navigation"; -import Header from "../../components/Header"; +import Header from "~/components/Header"; export default function FAQ() { const router = useRouter(); diff --git a/web/app/friends/layout.tsx b/web/app/friends/layout.tsx index a0cdb541..a471c311 100644 --- a/web/app/friends/layout.tsx +++ b/web/app/friends/layout.tsx @@ -1,6 +1,6 @@ import { Box } from "@mui/material"; -import BottomBar from "../../components/BottomBar"; -import Header from "../../components/Header"; +import BottomBar from "~/components/BottomBar"; +import Header from "~/components/Header"; export default function FriendsPageLayout({ children, diff --git a/web/app/friends/page.tsx b/web/app/friends/page.tsx index 3e254f0c..18817fcb 100644 --- a/web/app/friends/page.tsx +++ b/web/app/friends/page.tsx @@ -2,9 +2,9 @@ import { Box, Tab, Tabs } from "@mui/material"; import { useState } from "react"; -import { NavigateByAuthState } from "../../components/common/NavigateByAuthState"; -import Matchings from "../../components/match/matching"; -import Requests from "../../components/match/requests"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import Matchings from "~/components/match/matching"; +import Requests from "~/components/match/requests"; export default function Friends() { const [open, setOpen] = useState(0); diff --git a/web/app/home/layout.tsx b/web/app/home/layout.tsx index 7b43b1af..5a9eb8f3 100644 --- a/web/app/home/layout.tsx +++ b/web/app/home/layout.tsx @@ -1,6 +1,6 @@ import { Box } from "@mui/material"; -import BottomBar from "../../components/BottomBar"; -import Header from "../../components/Header"; +import BottomBar from "~/components/BottomBar"; +import Header from "~/components/Header"; export default function HomePageLayout({ children, diff --git a/web/app/home/page.tsx b/web/app/home/page.tsx index a868a7fd..be1bc198 100644 --- a/web/app/home/page.tsx +++ b/web/app/home/page.tsx @@ -4,15 +4,15 @@ import CloseIcon from "@mui/icons-material/Close"; import FavoriteIcon from "@mui/icons-material/Favorite"; import { Box, Button } from "@mui/material"; import { useCallback, useEffect, useState } from "react"; -import request from "../../api/request"; +import request from "~/api/request"; import shadows from "@mui/material/styles/shadows"; import { motion, useAnimation } from "framer-motion"; -import { useMyID, useRecommended } from "../../api/user"; -import { Card } from "../../components/Card"; -import { DraggableCard } from "../../components/DraggableCard"; -import FullScreenCircularProgress from "../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../components/common/NavigateByAuthState"; +import { useMyID, useRecommended } from "~/api/user"; +import { Card } from "~/components/Card"; +import { DraggableCard } from "~/components/DraggableCard"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; export default function Home() { const { data: recommended, error } = useRecommended(); diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 10bee45a..cb24e25a 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -8,10 +8,10 @@ import "@fontsource/roboto/300.css"; import "@fontsource/roboto/400.css"; import "@fontsource/roboto/500.css"; import "@fontsource/roboto/700.css"; -import BanLandscape from "../components/BanLandscape"; -import { AlertProvider } from "../components/common/alert/AlertProvider"; -import { ModalProvider } from "../components/common/modal/ModalProvider"; -import AuthProvider from "../firebase/auth/AuthProvider"; +import BanLandscape from "~/components/BanLandscape"; +import { AlertProvider } from "~/components/common/alert/AlertProvider"; +import { ModalProvider } from "~/components/common/modal/ModalProvider"; +import AuthProvider from "~/firebase/auth/AuthProvider"; const theme = createTheme({ palette: { diff --git a/web/app/login/page.tsx b/web/app/login/page.tsx index b60b854a..f4e73469 100644 --- a/web/app/login/page.tsx +++ b/web/app/login/page.tsx @@ -4,16 +4,16 @@ import { Box, Button, Link, Typography } from "@mui/material"; import { GoogleAuthProvider, signInWithPopup } from "firebase/auth"; import { useRouter } from "next/navigation"; import { useSnackbar } from "notistack"; -import * as user from "../../api/user"; -import { getByGUID } from "../../api/user"; -import type { GUID } from "../../common/types"; -import Header from "../../components/Header"; -import { auth } from "../../firebase/config"; +import * as user from "~/api/user"; +import { getByGUID } from "~/api/user"; +import type { GUID } from "~/common/types"; +import Header from "~/components/Header"; +import { auth } from "~/firebase/config"; import "./style.css"; import { useState } from "react"; -import { CourseMateIcon } from "../../components/common/CourseMateIcon"; -import FullScreenCircularProgress from "../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../components/common/NavigateByAuthState"; +import { CourseMateIcon } from "~/components/common/CourseMateIcon"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; const provider = new GoogleAuthProvider(); const ALLOW_ANY_MAIL_ADDR = diff --git a/web/app/settings/aboutUs/page.tsx b/web/app/settings/aboutUs/page.tsx index a38d99be..e742e407 100644 --- a/web/app/settings/aboutUs/page.tsx +++ b/web/app/settings/aboutUs/page.tsx @@ -1,8 +1,8 @@ import { GitHub, Language } from "@mui/icons-material"; import XIcon from "@mui/icons-material/X"; import { Box, Link, Typography } from "@mui/material"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import TopNavigation from "../../../components/common/TopNavigation"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import TopNavigation from "~/components/common/TopNavigation"; export default function AboutUs() { return ( diff --git a/web/app/settings/contact/page.tsx b/web/app/settings/contact/page.tsx index d51ae0fd..1481d5ac 100644 --- a/web/app/settings/contact/page.tsx +++ b/web/app/settings/contact/page.tsx @@ -1,6 +1,6 @@ import { Box, Button, Typography } from "@mui/material"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import TopNavigation from "../../../components/common/TopNavigation"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import TopNavigation from "~/components/common/TopNavigation"; export default function Contact() { return ( diff --git a/web/app/settings/delete/page.tsx b/web/app/settings/delete/page.tsx index 78684e1d..233be5a4 100644 --- a/web/app/settings/delete/page.tsx +++ b/web/app/settings/delete/page.tsx @@ -6,8 +6,8 @@ import Link from "next/link"; import { useRouter } from "next/navigation"; import { useSnackbar } from "notistack"; import { useCallback } from "react"; -import { deleteAccount } from "../../../api/user"; -import { useAlert } from "../../../components/common/alert/AlertProvider"; +import { deleteAccount } from "~/api/user"; +import { useAlert } from "~/components/common/alert/AlertProvider"; export default function DeleteAccount() { const router = useRouter(); diff --git a/web/app/settings/disclaimer/page.tsx b/web/app/settings/disclaimer/page.tsx index c65aef75..053d2372 100644 --- a/web/app/settings/disclaimer/page.tsx +++ b/web/app/settings/disclaimer/page.tsx @@ -1,6 +1,6 @@ import { Box, Typography } from "@mui/material"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import TopNavigation from "../../../components/common/TopNavigation"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import TopNavigation from "~/components/common/TopNavigation"; export default function Disclaimer() { return ( diff --git a/web/app/settings/layout.tsx b/web/app/settings/layout.tsx index 9f618772..a32f0987 100644 --- a/web/app/settings/layout.tsx +++ b/web/app/settings/layout.tsx @@ -1,6 +1,6 @@ import { Box } from "@mui/material"; -import BottomBar from "../../components/BottomBar"; -import Header from "../../components/Header"; +import BottomBar from "~/components/BottomBar"; +import Header from "~/components/Header"; export default function SettingsPageLayout({ children, diff --git a/web/app/settings/page.tsx b/web/app/settings/page.tsx index 0ac88214..1fb8a79e 100644 --- a/web/app/settings/page.tsx +++ b/web/app/settings/page.tsx @@ -6,8 +6,8 @@ import { ListItemText, } from "@mui/material"; import Link from "next/link"; -import LogOutButton from "../../components/LogOutButton"; -import { NavigateByAuthState } from "../../components/common/NavigateByAuthState"; +import LogOutButton from "~/components/LogOutButton"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; export default function Settings() { return ( diff --git a/web/app/settings/profile/page.tsx b/web/app/settings/profile/page.tsx index 49be77a1..9475bc9e 100644 --- a/web/app/settings/profile/page.tsx +++ b/web/app/settings/profile/page.tsx @@ -4,11 +4,11 @@ import EditIcon from "@mui/icons-material/Edit"; import { Box, Button, Typography } from "@mui/material"; import Link from "next/link"; import { useState } from "react"; -import { useAboutMe } from "../../../api/user"; -import { Card } from "../../../components/Card"; -import FullScreenCircularProgress from "../../../components/common/FullScreenCircularProgress"; -import { NavigateByAuthState } from "../../../components/common/NavigateByAuthState"; -import TopNavigation from "../../../components/common/TopNavigation"; +import { useAboutMe } from "~/api/user"; +import { Card } from "~/components/Card"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import { NavigateByAuthState } from "~/components/common/NavigateByAuthState"; +import TopNavigation from "~/components/common/TopNavigation"; export default function SettingsProfile() { const { state } = useAboutMe(); diff --git a/web/app/signup/functions.ts b/web/app/signup/functions.ts index a6d2a989..d928ed40 100644 --- a/web/app/signup/functions.ts +++ b/web/app/signup/functions.ts @@ -1,9 +1,9 @@ import { getAuth } from "firebase/auth"; import type { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; import type { EnqueueSnackbar } from "notistack"; -import * as userAPI from "../../api/user"; -import type { GUID, User } from "../../common/types"; -import type { UpdateUser } from "../../common/types"; +import * as userAPI from "~/api/user"; +import type { GUID, User } from "~/common/types"; +import type { UpdateUser } from "~/common/types"; type Dependencies = { router: AppRouterInstance; diff --git a/web/app/signup/page.tsx b/web/app/signup/page.tsx index 5c5e65d7..09944965 100644 --- a/web/app/signup/page.tsx +++ b/web/app/signup/page.tsx @@ -5,8 +5,8 @@ import { useSnackbar } from "notistack"; import { useState } from "react"; import { useRouter } from "next/navigation"; -import type { Step1User } from "../../../common/zod/types"; -import Header from "../../components/Header"; +import type { Step1User } from "~/common/zod/types"; +import Header from "~/components/Header"; import { register } from "./functions"; import Step1 from "./steps/step1_profile"; import Step2, { type Step2Data } from "./steps/step2_img"; diff --git a/web/app/signup/steps/step1_profile.tsx b/web/app/signup/steps/step1_profile.tsx index 72b15b4b..8314232d 100644 --- a/web/app/signup/steps/step1_profile.tsx +++ b/web/app/signup/steps/step1_profile.tsx @@ -11,10 +11,10 @@ import { Typography, } from "@mui/material"; import type { SelectChangeEvent } from "@mui/material"; -import { parseStep1UserSchema } from "../../../../common/zod/methods"; -import type { Step1User } from "../../../../common/zod/types"; -import type { StepProps } from "../../../app/signup/common"; -import { facultiesAndDepartments } from "../../../app/signup/data"; +import type { StepProps } from "~/app/signup/common"; +import { facultiesAndDepartments } from "~/app/signup/data"; +import { parseStep1UserSchema } from "~/common/zod/methods"; +import type { Step1User } from "~/common/zod/types"; export default function Step1({ onSave, prev, caller }: StepProps) { const [name, setName] = useState(prev?.name ?? ""); diff --git a/web/app/signup/steps/step2_img.tsx b/web/app/signup/steps/step2_img.tsx index 799e25c6..621685ac 100644 --- a/web/app/signup/steps/step2_img.tsx +++ b/web/app/signup/steps/step2_img.tsx @@ -1,10 +1,10 @@ import { Box, Button, Typography } from "@mui/material"; import { enqueueSnackbar } from "notistack"; import { useCallback, useState } from "react"; -import type { BackProp, StepProps } from "../../../app/signup/common"; -import PhotoModal from "../../../components/config/PhotoModal"; -import { PhotoPreviewButton } from "../../../components/config/PhotoPreview"; -import UserAvatar from "../../../components/human/avatar"; +import type { BackProp, StepProps } from "~/app/signup/common"; +import PhotoModal from "~/components/config/PhotoModal"; +import { PhotoPreviewButton } from "~/components/config/PhotoPreview"; +import UserAvatar from "~/components/human/avatar"; export type Step2Data = { pictureUrl: string; diff --git a/web/app/signup/steps/step3_confirmation.tsx b/web/app/signup/steps/step3_confirmation.tsx index c2cc703f..a1ad70a7 100644 --- a/web/app/signup/steps/step3_confirmation.tsx +++ b/web/app/signup/steps/step3_confirmation.tsx @@ -1,7 +1,7 @@ import { Box, Button, Typography } from "@mui/material"; -import type { Step1User } from "../../../../common/zod/types"; -import type { BackProp, StepProps } from "../../../app/signup/common"; -import UserAvatar from "../../../components/human/avatar"; +import type { BackProp, StepProps } from "~/app/signup/common"; +import type { Step1User } from "~/common/zod/types"; +import UserAvatar from "~/components/human/avatar"; import type { Step2Data } from "./step2_img"; interface UserInfoProp { diff --git a/web/app/signup/steps/step4_course.tsx b/web/app/signup/steps/step4_course.tsx index 2b041c64..f9d738a4 100644 --- a/web/app/signup/steps/step4_course.tsx +++ b/web/app/signup/steps/step4_course.tsx @@ -1,9 +1,9 @@ import { Button, Typography } from "@mui/material"; import { Box } from "@mui/system"; import Link from "next/link"; -import { useMyID } from "../../../api/user"; -import FullScreenCircularProgress from "../../../components/common/FullScreenCircularProgress"; -import EditableCoursesTable from "../../../components/course/EditableCoursesTable"; +import { useMyID } from "~/api/user"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; +import EditableCoursesTable from "~/components/course/EditableCoursesTable"; export default function Step4() { const { state } = useMyID(); diff --git a/web/app/tutorial/page.tsx b/web/app/tutorial/page.tsx index b860e6fa..26c0eecb 100644 --- a/web/app/tutorial/page.tsx +++ b/web/app/tutorial/page.tsx @@ -7,37 +7,36 @@ import "swiper/css"; import "swiper/css/navigation"; import "swiper/css/pagination"; import Link from "next/link"; -import Header from "../../components/Header"; +import Header from "~/components/Header"; -// TODO: 画像表示の参照を直す const tutorialSteps = [ { label: "CourseMateの使い方", - imgPath: "../../../public/course-mate-icon.svg", + imgPath: "/course-mate-icon.svg", }, { label: "気になる人に「いいね」を送ろう!", - imgPath: "../../public/tutorial-1.png", + imgPath: "/tutorial-1.png", }, { label: "リクエストが来たら...", - imgPath: "../../public/tutorial-2.png", + imgPath: "/tutorial-2.png", }, { label: "承認して、マッチング!", - imgPath: "../../public/tutorial-3.png", + imgPath: "/tutorial-3.png", }, { label: "チャットを使って仲良くなろう!", - imgPath: "../../public/tutorial-4.png", + imgPath: "/tutorial-4.png", }, { label: "魅力的なカードを作ってね!", - imgPath: "../../public/tutorial-5.png", + imgPath: "/tutorial-5.png", }, { label: "実際にCourseMateを使ってみよう!下のボタンをクリック!", - imgPath: "../../public/tutorial-6.png", + imgPath: "/tutorial-6.png", }, ]; diff --git a/web/bun.lockb b/web/bun.lockb index 9c4777ea..fd54ff76 100755 Binary files a/web/bun.lockb and b/web/bun.lockb differ diff --git a/web/components/Card.tsx b/web/components/Card.tsx index 9575ac94..e2eb3407 100644 --- a/web/components/Card.tsx +++ b/web/components/Card.tsx @@ -1,7 +1,7 @@ import ThreeSixtyIcon from "@mui/icons-material/ThreeSixty"; import { Chip } from "@mui/material"; import { useEffect, useState } from "react"; -import type { User, UserID } from "../common/types"; +import type { User, UserID } from "~/common/types"; import NonEditableCoursesTable from "./course/NonEditableCoursesTable"; import UserAvatar from "./human/avatar"; diff --git a/web/components/DraggableCard.tsx b/web/components/DraggableCard.tsx index 8aaff469..34e12d0f 100644 --- a/web/components/DraggableCard.tsx +++ b/web/components/DraggableCard.tsx @@ -3,7 +3,7 @@ import FavoriteIcon from "@mui/icons-material/Favorite"; import { Box, Typography } from "@mui/material"; import { motion, useMotionValue, useMotionValueEvent } from "framer-motion"; import { useCallback, useState } from "react"; -import type { User, UserID } from "../../common/types"; +import type { User, UserID } from "~/common/types"; import { Card } from "./Card"; const SWIPE_THRESHOLD = 30; diff --git a/web/components/LogOutButton.tsx b/web/components/LogOutButton.tsx index dc12e80f..0bff3fc9 100644 --- a/web/components/LogOutButton.tsx +++ b/web/components/LogOutButton.tsx @@ -5,7 +5,7 @@ import { signOut } from "firebase/auth"; import { useRouter } from "next/navigation"; import { useSnackbar } from "notistack"; import { useCallback } from "react"; -import { auth } from "../firebase/config"; +import { auth } from "~/firebase/config"; import { useAlert } from "./common/alert/AlertProvider"; export default function LogOutButton() { diff --git a/web/components/chat/MessageInput.tsx b/web/components/chat/MessageInput.tsx index 7959383a..da8e7fe0 100644 --- a/web/components/chat/MessageInput.tsx +++ b/web/components/chat/MessageInput.tsx @@ -1,8 +1,8 @@ import SendIcon from "@mui/icons-material/Send"; import { Box, IconButton, Stack, TextField, Typography } from "@mui/material"; import { useEffect, useState } from "react"; -import type { DMOverview, SendMessage, UserID } from "../../common/types"; -import { parseContent } from "../../common/zod/methods"; +import type { DMOverview, SendMessage, UserID } from "~/common/types"; +import { parseContent } from "~/common/zod/methods"; type Props = { send: (to: UserID, m: SendMessage) => void; diff --git a/web/components/chat/Room.tsx b/web/components/chat/Room.tsx index c3a11cd0..302c54d6 100644 --- a/web/components/chat/Room.tsx +++ b/web/components/chat/Room.tsx @@ -1,5 +1,5 @@ import { ListItem, Stack, Typography } from "@mui/material"; -import type { DMOverview } from "../../../common/types"; +import type { DMOverview } from "~/common/types"; import UserAvatar from "../human/avatar"; type Props = { diff --git a/web/components/chat/RoomHeader.tsx b/web/components/chat/RoomHeader.tsx index 9871df93..e0baa125 100644 --- a/web/components/chat/RoomHeader.tsx +++ b/web/components/chat/RoomHeader.tsx @@ -1,7 +1,7 @@ import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { Box, Button, Typography } from "@mui/material"; import Link from "next/link"; -import type { DMOverview } from "../../common/types"; +import type { DMOverview } from "~/common/types"; import UserAvatar from "../human/avatar"; type Props = { room: DMOverview; diff --git a/web/components/chat/RoomList.tsx b/web/components/chat/RoomList.tsx index a11bfb65..5d5513d7 100644 --- a/web/components/chat/RoomList.tsx +++ b/web/components/chat/RoomList.tsx @@ -2,7 +2,7 @@ import { Box, List, Typography } from "@mui/material"; import { useRouter } from "next/navigation"; -import type { RoomOverview } from "../../common/types"; +import type { RoomOverview } from "~/common/types"; import { HumanListItem } from "../human/humanListItem"; type RoomListProps = { diff --git a/web/components/chat/RoomWindow.tsx b/web/components/chat/RoomWindow.tsx index 7c1f6038..eb2777d8 100644 --- a/web/components/chat/RoomWindow.tsx +++ b/web/components/chat/RoomWindow.tsx @@ -2,19 +2,19 @@ import { Box, Button, Paper, TextField, Typography } from "@mui/material"; import { useSearchParams } from "next/navigation"; import { useSnackbar } from "notistack"; import { useCallback, useEffect, useRef, useState } from "react"; -import * as chat from "../../api/chat/chat"; -import { useMessages } from "../../api/chat/hooks"; -import * as user from "../../api/user"; -import { useMyID } from "../../api/user"; +import * as chat from "~/api/chat/chat"; +import { useMessages } from "~/api/chat/hooks"; +import * as user from "~/api/user"; +import { useMyID } from "~/api/user"; import type { DMOverview, Message, MessageID, SendMessage, UserID, -} from "../../common/types"; -import type { Content } from "../../common/zod/types"; -import { getIdToken } from "../../firebase/auth/lib"; +} from "~/common/types"; +import type { Content } from "~/common/zod/types"; +import { getIdToken } from "~/firebase/auth/lib"; import Dots from "../common/Dots"; import { socket } from "../data/socket"; import { MessageInput } from "./MessageInput"; diff --git a/web/components/common/NavigateByAuthState.tsx b/web/components/common/NavigateByAuthState.tsx index 9e22d2ae..a88d4a32 100644 --- a/web/components/common/NavigateByAuthState.tsx +++ b/web/components/common/NavigateByAuthState.tsx @@ -3,7 +3,7 @@ import { getAuth, onAuthStateChanged } from "firebase/auth"; import { useRouter } from "next/navigation"; import { type ReactNode, useEffect, useState } from "react"; -import { userExists } from "../../api/internal/endpoints"; +import { userExists } from "~/api/internal/endpoints"; import FullScreenCircularProgress from "./FullScreenCircularProgress"; /** diff --git a/web/components/common/modal/ModalProvider.tsx b/web/components/common/modal/ModalProvider.tsx index 591057cc..3b59bbcb 100644 --- a/web/components/common/modal/ModalProvider.tsx +++ b/web/components/common/modal/ModalProvider.tsx @@ -1,8 +1,8 @@ import { Box } from "@mui/material"; import { styled } from "@mui/system"; import { type ReactNode, createContext, useContext, useState } from "react"; -import { useMyID } from "../../../api/user"; -import type { User } from "../../../common/types"; +import { useMyID } from "~/api/user"; +import type { User } from "~/common/types"; import { Card } from "../../Card"; const Overlay = styled(Box)({ diff --git a/web/components/config/PhotoModal.tsx b/web/components/config/PhotoModal.tsx index b68dae31..7c9c4a04 100644 --- a/web/components/config/PhotoModal.tsx +++ b/web/components/config/PhotoModal.tsx @@ -1,6 +1,6 @@ import { Box, Button, Modal } from "@mui/material"; import { useState } from "react"; -import { MAX_IMAGE_SIZE, uploadImage } from "../../api/internal/fetch-func"; +import { MAX_IMAGE_SIZE, uploadImage } from "~/api/internal/fetch-func"; import { PhotoPreview } from "./PhotoPreview"; async function upload( diff --git a/web/components/config/PhotoPreview.tsx b/web/components/config/PhotoPreview.tsx index 7469da6d..c829f056 100644 --- a/web/components/config/PhotoPreview.tsx +++ b/web/components/config/PhotoPreview.tsx @@ -6,7 +6,7 @@ import { useRef, useState, } from "react"; -import { uploadImage } from "../../api/image"; +import { uploadImage } from "~/api/image"; import { ImageCropper } from "../ImageCropper"; import { photo } from "../data/photo-preview"; diff --git a/web/components/course/EditableCoursesTable/index.tsx b/web/components/course/EditableCoursesTable/index.tsx index f04d27af..5dd32447 100644 --- a/web/components/course/EditableCoursesTable/index.tsx +++ b/web/components/course/EditableCoursesTable/index.tsx @@ -1,8 +1,8 @@ import { useEffect, useState } from "react"; -import courseApi from "../../../api/course"; -import type { Course, Day, UserID } from "../../../common/types"; -import FullScreenCircularProgress from "../../common/FullScreenCircularProgress"; +import courseApi from "~/api/course"; +import type { Course, Day, UserID } from "~/common/types"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; import CoursesTableCore from "../components/CoursesTableCore"; import SelectCourseDialog from "../components/SelectCourseDialog"; diff --git a/web/components/course/NonEditableCoursesTable/index.tsx b/web/components/course/NonEditableCoursesTable/index.tsx index 727543ab..7a9870e4 100644 --- a/web/components/course/NonEditableCoursesTable/index.tsx +++ b/web/components/course/NonEditableCoursesTable/index.tsx @@ -1,8 +1,8 @@ import { useEffect, useState } from "react"; -import courseApi from "../../../api/course"; -import type { Course, UserID } from "../../../common/types"; -import FullScreenCircularProgress from "../../common/FullScreenCircularProgress"; +import courseApi from "~/api/course"; +import type { Course, UserID } from "~/common/types"; +import FullScreenCircularProgress from "~/components/common/FullScreenCircularProgress"; import CoursesTableCore from "../components/CoursesTableCore"; type Props = { diff --git a/web/components/course/components/CourseDeleteConfirmDialog.tsx b/web/components/course/components/CourseDeleteConfirmDialog.tsx index 52905c58..2fdcbe69 100644 --- a/web/components/course/components/CourseDeleteConfirmDialog.tsx +++ b/web/components/course/components/CourseDeleteConfirmDialog.tsx @@ -9,8 +9,8 @@ import { DialogTitle, } from "@mui/material"; import { useEffect, useState } from "react"; -import { deleteMyCourse, getMyCoursesOverlapWith } from "../../../api/course"; -import type { Course } from "../../../common/types"; +import { deleteMyCourse, getMyCoursesOverlapWith } from "~/api/course"; +import type { Course } from "~/common/types"; export default function CourseDeleteRegisterConfirmDialog({ open, diff --git a/web/components/course/components/CourseRegisterConfirmDialog.tsx b/web/components/course/components/CourseRegisterConfirmDialog.tsx index 3709583f..faa344a3 100644 --- a/web/components/course/components/CourseRegisterConfirmDialog.tsx +++ b/web/components/course/components/CourseRegisterConfirmDialog.tsx @@ -9,8 +9,8 @@ import { DialogTitle, } from "@mui/material"; import { useEffect, useState } from "react"; -import { addMyCourse, getMyCoursesOverlapWith } from "../../../api/course"; -import type { Course } from "../../../common/types"; +import { addMyCourse, getMyCoursesOverlapWith } from "~/api/course"; +import type { Course } from "~/common/types"; export default function CourseRegisterConfirmDialog({ open, diff --git a/web/components/course/components/CoursesTableCore/index.tsx b/web/components/course/components/CoursesTableCore/index.tsx index 4cec8f70..a4dd7cba 100644 --- a/web/components/course/components/CoursesTableCore/index.tsx +++ b/web/components/course/components/CoursesTableCore/index.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from "react"; -import { ACTIVE_DAYS, DAY_TO_JAPANESE_MAP } from "../../../../common/consts"; -import type { Course, Day } from "../../../../common/types"; +import { ACTIVE_DAYS, DAY_TO_JAPANESE_MAP } from "~/common/consts"; +import type { Course, Day } from "~/common/types"; import { truncateStr } from "./lib"; import styles from "./styles.module.css"; diff --git a/web/components/course/components/SelectCourseDialog.tsx b/web/components/course/components/SelectCourseDialog.tsx index 046a3475..41bba1b7 100644 --- a/web/components/course/components/SelectCourseDialog.tsx +++ b/web/components/course/components/SelectCourseDialog.tsx @@ -15,9 +15,9 @@ import { } from "@mui/material"; import IconButton from "@mui/material/IconButton"; import { useEffect, useState } from "react"; -import courseApi from "../../../api/course"; -import { DAY_TO_JAPANESE_MAP } from "../../../common/consts"; -import type { Course, Day } from "../../../common/types"; +import courseApi from "~/api/course"; +import { DAY_TO_JAPANESE_MAP } from "~/common/consts"; +import type { Course, Day } from "~/common/types"; import CourseDeleteConfirmDialog from "./CourseDeleteConfirmDialog"; import CourseRegisterConfirmDialog from "./CourseRegisterConfirmDialog"; diff --git a/web/components/match/matching.tsx b/web/components/match/matching.tsx index fc5f5a41..140515a0 100644 --- a/web/components/match/matching.tsx +++ b/web/components/match/matching.tsx @@ -1,6 +1,6 @@ import { Box, List } from "@mui/material"; -import { deleteMatch } from "../../api/match"; -import { useMatched } from "../../api/user"; +import { deleteMatch } from "~/api/match"; +import { useMatched } from "~/api/user"; import FullScreenCircularProgress from "../common/FullScreenCircularProgress"; import { useModal } from "../common/modal/ModalProvider"; import { HumanListItem } from "../human/humanListItem"; diff --git a/web/components/match/myRequests.tsx b/web/components/match/myRequests.tsx index 3061044d..1e247d16 100644 --- a/web/components/match/myRequests.tsx +++ b/web/components/match/myRequests.tsx @@ -1,7 +1,7 @@ import { Box } from "@mui/material"; import { List } from "@mui/material"; -import * as request from "../../api/request"; -import { usePendingFromMe } from "../../api/user"; +import * as request from "~/api/request"; +import { usePendingFromMe } from "~/api/user"; import FullScreenCircularProgress from "../common/FullScreenCircularProgress"; import { useModal } from "../common/modal/ModalProvider"; import { HumanListItem } from "../human/humanListItem"; diff --git a/web/components/match/othersRequests.tsx b/web/components/match/othersRequests.tsx index a51e34b2..1e828f14 100644 --- a/web/components/match/othersRequests.tsx +++ b/web/components/match/othersRequests.tsx @@ -1,6 +1,6 @@ import { Box, List } from "@mui/material"; -import request from "../../api/request"; -import { usePendingToMe } from "../../api/user"; +import request from "~/api/request"; +import { usePendingToMe } from "~/api/user"; import FullScreenCircularProgress from "../common/FullScreenCircularProgress"; import { useModal } from "../common/modal/ModalProvider"; import { HumanListItem } from "../human/humanListItem"; diff --git a/web/firebase/auth/AuthProvider.tsx b/web/firebase/auth/AuthProvider.tsx index 49412bc3..9a009760 100644 --- a/web/firebase/auth/AuthProvider.tsx +++ b/web/firebase/auth/AuthProvider.tsx @@ -1,8 +1,8 @@ import { getAuth, onAuthStateChanged } from "firebase/auth"; import type React from "react"; import { createContext, useContext, useEffect, useState } from "react"; -import type { GUID, User } from "../../../common/types"; -import * as userAPI from "../../api/user"; +import * as userAPI from "~/api/user"; +import type { GUID, User } from "~/common/types"; const AuthContext = createContext(undefined); diff --git a/web/firebase/auth/lib.ts b/web/firebase/auth/lib.ts index 15f33c3a..0d0e22b3 100644 --- a/web/firebase/auth/lib.ts +++ b/web/firebase/auth/lib.ts @@ -1,6 +1,6 @@ import { getAuth, onAuthStateChanged } from "firebase/auth"; import type { User } from "firebase/auth"; -import type { IDToken } from "../../../common/types"; +import type { IDToken } from "~/common/types"; import { app } from "../config"; export class ErrUnauthorized extends Error {} diff --git a/web/hooks/useData.ts b/web/hooks/useData.ts index 586ddab7..303699e8 100644 --- a/web/hooks/useData.ts +++ b/web/hooks/useData.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from "react"; -import { Err, Ok, type Result } from "../../common/lib/result"; -import { credFetch } from "../firebase/auth/lib"; +import { Err, Ok, type Result } from "~/common/lib/result"; +import { credFetch } from "~/firebase/auth/lib"; // TODO: separate this into concrete types and urls s.t. there is no unsafe any // also use sth like something like Zod diff --git a/web/tsconfig.json b/web/tsconfig.json index a6c3386f..cf84dc49 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -23,7 +23,11 @@ { "name": "next" } - ] + ], + "baseUrl": ".", + "paths": { + "~/*": ["./*"] + } }, "include": [ "./src",