Files
Gnuboard7/templates/_bundled/sirsoft-basic/routes.json
T
2026-07-01 10:30:32 +09:00

352 lines
10 KiB
JSON

{
"version": "1.0.0",
"description": "sirsoft-basic 사용자 템플릿 라우트 정의",
"routes": [
{
"_comment": "=== 홈 ===",
"path": "/",
"layout": "home",
"auth_required": false,
"meta": {
"title": "$t:user.home.page_title"
}
},
{
"_comment": "=== 인증 ===",
"path": "/login",
"layout": "auth/login",
"auth_required": false,
"guest_only": true,
"meta": {
"title": "$t:user.auth.login_title"
}
},
{
"path": "/register",
"layout": "auth/register",
"auth_required": false,
"guest_only": true,
"meta": {
"title": "$t:user.auth.register_title"
}
},
{
"path": "/forgot-password",
"layout": "auth/forgot_password",
"auth_required": false,
"guest_only": true,
"meta": {
"title": "$t:user.auth.forgot_password_title"
}
},
{
"path": "/reset-password",
"layout": "auth/reset_password",
"auth_required": false,
"guest_only": true,
"meta": {
"title": "$t:user.auth.reset_password_title"
}
},
{
"path": "/identity/challenge",
"layout": "auth/identity_challenge",
"auth_required": false,
"meta": {
"title": "$t:user.identity.challenge.title"
}
},
{
"_comment": "=== 게시판 ===",
"path": "/boards",
"layout": "board/boards",
"auth_required": false,
"meta": {
"title": "$t:user.board.boards_title"
}
},
{
"path": "/boards/popular",
"layout": "board/popular",
"auth_required": false,
"meta": {
"title": "$t:user.board.popular_title"
}
},
{
"path": "/board/:slug",
"layout": "board/index",
"auth_required": false,
"meta": {
"title": "$t:user.board.list_title"
}
},
{
"path": "/board/:slug/write",
"layout": "board/form",
"auth_required": false,
"meta": {
"title": "$t:user.board.write_title"
}
},
{
"path": "/board/:slug/:id",
"layout": "board/show",
"auth_required": false,
"meta": {
"title": "$t:user.board.show_title"
}
},
{
"path": "/board/:slug/:id/edit",
"layout": "board/form",
"auth_required": false,
"meta": {
"title": "$t:user.board.edit_title"
}
},
{
"_comment": "=== 쇼핑몰 ===",
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/products",
"layout": "shop/index",
"auth_required": false,
"meta": {
"title": "$t:user.shop.list_title"
}
},
{
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/category/:slug",
"layout": "shop/category",
"auth_required": false,
"meta": {
"title": "$t:user.shop.category_title"
}
},
{
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/products/:id",
"layout": "shop/show",
"auth_required": false,
"meta": {
"title": "$t:user.shop.show_title"
}
},
{
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/cart",
"layout": "shop/cart",
"auth_required": false,
"meta": {
"title": "$t:user.shop.cart_title"
}
},
{
"_comment": "비회원 주문 지원 — 라우트 가드는 false 로 두고, 인증 보호는 백엔드 API(/api/modules/sirsoft-ecommerce/checkout 등의 optional.sanctum) 와 레이아웃 내 _global.currentUser?.uuid 분기가 담당",
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/checkout",
"layout": "shop/checkout",
"auth_required": false,
"meta": {
"title": "$t:user.shop.checkout_title"
}
},
{
"_comment": "주문 완료 — 회원/비회원 공유 라우트. 회원은 인증 세션, 비회원은 _global.guestOrderToken(localStorage) + globalHeaders 자동 주입으로 본인 확인. order_complete 레이아웃의 data_sources 가 _global.currentUser?.uuid 로 user/orders ↔ guest/orders 분기.",
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/orders/:id/complete",
"layout": "shop/order_complete",
"auth_required": false,
"meta": {
"title": "$t:user.shop.order_complete_title"
}
},
{
"_comment": "비회원 주문 조회 폼 — 주문번호+휴대폰+비밀번호로 본인 확인 후 30분 유효 토큰 발급. 회원도 접근 가능하지만 사용 이유 없음 (마이페이지 사용). 경로는 백엔드 API(guest/orders/*) 와 동일한 guest/orders 진입점으로 통일. 정적 경로이므로 아래 :order_number 상세 라우트보다 먼저 정의되어야 우선 매칭된다.",
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/guest/orders",
"layout": "shop/guest_order_form",
"auth_required": false,
"meta": {
"title": "$t:user.shop.guest_order_form_title"
}
},
{
"_comment": "비회원 주문 상세 — 회원 마이페이지 주문 상세와 동등한 partial 재사용. _user_base globalHeaders 가 X-Guest-Order-Token 자동 주입. 401/404 시 토큰 삭제 + 조회 폼(guest/orders)으로 안내.",
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/guest/orders/:order_number",
"layout": "shop/guest_order_show",
"auth_required": false,
"meta": {
"title": "$t:user.shop.guest_order_show_title"
}
},
{
"path": "/{{_global.modules?.['sirsoft-ecommerce']?.basic_info?.no_route ? '' : (_global.modules?.['sirsoft-ecommerce']?.basic_info?.route_path ?? 'shop')}}/reorder/:id",
"layout": "shop/reorder",
"auth_required": true,
"meta": {
"title": "$t:shop.reorder.title"
}
},
{
"_comment": "=== 마이페이지 ===",
"path": "/mypage",
"redirect": "/mypage/profile",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.page_title"
}
},
{
"path": "/mypage/profile",
"layout": "mypage/profile",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.profile_title"
}
},
{
"path": "/mypage/profile/edit",
"layout": "mypage/profile-edit",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.profile_edit_title"
}
},
{
"path": "/mypage/change-password",
"layout": "mypage/change-password",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.change_password_title"
}
},
{
"path": "/mypage/orders",
"layout": "mypage/orders",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.orders_title"
}
},
{
"path": "/mypage/orders/:order_number",
"layout": "mypage/orders/show",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.order_detail_title"
}
},
{
"path": "/mypage/mileage",
"layout": "mypage/mileage",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.mileage_title"
}
},
{
"path": "/mypage/wishlist",
"layout": "mypage/wishlist",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.wishlist_title"
}
},
{
"path": "/mypage/addresses",
"layout": "mypage/addresses",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.addresses_title"
}
},
{
"path": "/mypage/notifications",
"layout": "mypage/notifications",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.notifications_title"
}
},
{
"path": "/mypage/board",
"layout": "mypage/board",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.board_title"
}
},
{
"path": "/mypage/inquiries",
"layout": "mypage/inquiries",
"auth_required": true,
"meta": {
"title": "$t:user.mypage.inquiries_title"
}
},
{
"_comment": "=== 사용자 프로필 ===",
"path": "/users/:userId",
"layout": "users/show",
"auth_required": false,
"meta": {
"title": "$t:user.profile.page_title"
}
},
{
"path": "/users/:userId/posts",
"layout": "users/posts",
"auth_required": false,
"meta": {
"title": "$t:user.profile.posts_page_title"
}
},
{
"_comment": "=== 페이지 ===",
"path": "/page/:slug",
"layout": "page/show",
"auth_required": false,
"meta": {
"title": "$t:user.page.page_title"
}
},
{
"_comment": "=== 검색 ===",
"path": "/search",
"layout": "search/index",
"auth_required": false,
"meta": {
"title": "$t:user.search.page_title"
}
},
{
"_comment": "=== 에러 페이지 ===",
"path": "/404",
"layout": "errors/404",
"auth_required": false,
"meta": {
"title": "$t:user.errors.not_found_title"
}
},
{
"path": "/403",
"layout": "errors/403",
"auth_required": false,
"meta": {
"title": "$t:user.errors.forbidden_title"
}
},
{
"path": "/500",
"layout": "errors/500",
"auth_required": false,
"meta": {
"title": "$t:user.errors.server_error_title"
}
}
]
}