dineway 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/route-utils.d.mts +2 -2
- package/dist/api/route-utils.mjs +3 -3
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +4 -4
- package/dist/{api-CgxdfUg4.mjs → api-CUdFqNOK.mjs} +11 -11
- package/dist/{apply-CGVHi2r7.mjs → apply-Wyg77UOb.mjs} +13 -13
- package/dist/astro/index.d.mts +2 -2
- package/dist/astro/index.mjs +5 -1
- package/dist/astro/middleware/auth.d.mts +2 -2
- package/dist/astro/middleware/redirect.mjs +3 -3
- package/dist/astro/middleware.mjs +43 -43
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +3 -3
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +3 -3
- package/dist/astro/routes/api/admin/briefing.mjs +10 -10
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/bylines/index.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/bulk.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/index.mjs +3 -3
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +13 -13
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +13 -13
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +15 -15
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +15 -15
- package/dist/astro/routes/api/admin/context/diff.mjs +15 -15
- package/dist/astro/routes/api/admin/context/index.mjs +15 -15
- package/dist/astro/routes/api/admin/context/stale.mjs +15 -15
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +14 -14
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +16 -16
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +16 -16
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +13 -13
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +29 -29
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +29 -29
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +29 -29
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +29 -29
- package/dist/astro/routes/api/admin/plugins/index.mjs +26 -26
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +29 -29
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +26 -26
- package/dist/astro/routes/api/admin/plugins/updates.mjs +26 -26
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +1 -1
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +15 -15
- package/dist/astro/routes/api/admin/review-requests/index.mjs +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +26 -26
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/index.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/register-options.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/signup/complete.mjs +3 -3
- package/dist/astro/routes/api/auth/signup/request.mjs +3 -3
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/index.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/trash.mjs +3 -3
- package/dist/astro/routes/api/dashboard.mjs +1 -1
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -15
- package/dist/astro/routes/api/import/wordpress/media.mjs +4 -4
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +18 -18
- package/dist/astro/routes/api/manifest.mjs +1 -1
- package/dist/astro/routes/api/mcp.mjs +38 -38
- package/dist/astro/routes/api/media/_id_/confirm.mjs +3 -3
- package/dist/astro/routes/api/media/_id_.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.mjs +5 -5
- package/dist/astro/routes/api/media.mjs +7 -7
- package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts +8 -0
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +127 -0
- package/dist/astro/routes/api/menus/_name_/items.d.mts +1 -3
- package/dist/astro/routes/api/menus/_name_/items.mjs +17 -108
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +16 -16
- package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -16
- package/dist/astro/routes/api/menus/_name_.mjs +16 -16
- package/dist/astro/routes/api/menus/index.mjs +16 -16
- package/dist/astro/routes/api/openapi.json.mjs +26 -26
- package/dist/astro/routes/api/redirects/404s/index.mjs +5 -5
- package/dist/astro/routes/api/redirects/404s/summary.mjs +5 -5
- package/dist/astro/routes/api/redirects/_id_.mjs +17 -17
- package/dist/astro/routes/api/redirects/index.mjs +17 -17
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +26 -26
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +26 -26
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +26 -26
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +26 -26
- package/dist/astro/routes/api/schema/collections/index.mjs +26 -26
- package/dist/astro/routes/api/schema/index.mjs +3 -3
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +26 -26
- package/dist/astro/routes/api/schema/orphans/index.mjs +26 -26
- package/dist/astro/routes/api/search/enable.mjs +6 -6
- package/dist/astro/routes/api/search/index.mjs +6 -6
- package/dist/astro/routes/api/search/rebuild.mjs +6 -6
- package/dist/astro/routes/api/search/stats.mjs +3 -3
- package/dist/astro/routes/api/search/suggest.mjs +6 -6
- package/dist/astro/routes/api/sections/_slug_.mjs +16 -16
- package/dist/astro/routes/api/sections/index.mjs +16 -16
- package/dist/astro/routes/api/settings.mjs +16 -16
- package/dist/astro/routes/api/setup/admin-verify.mjs +3 -3
- package/dist/astro/routes/api/setup/admin.mjs +3 -3
- package/dist/astro/routes/api/setup/dev-bypass.mjs +11 -11
- package/dist/astro/routes/api/setup/index.mjs +14 -14
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +18 -18
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +18 -18
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +18 -18
- package/dist/astro/routes/api/taxonomies/index.mjs +18 -18
- package/dist/astro/routes/api/typegen.mjs +3 -3
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +15 -15
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -16
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -16
- package/dist/astro/routes/api/widget-areas/_name_.mjs +14 -14
- package/dist/astro/routes/api/widget-areas/index.mjs +16 -16
- package/dist/astro/routes/robots.txt.mjs +3 -3
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +4 -4
- package/dist/astro/routes/sitemap.xml.mjs +4 -4
- package/dist/astro/types.d.mts +2 -2
- package/dist/{briefing-4k6R0KAr.mjs → briefing-Dk4I4VC8.mjs} +3 -3
- package/dist/{briefing-DM7e2yd3.mjs → briefing-PFT3T6KW.mjs} +1 -1
- package/dist/{byline-BxAf79s1.mjs → byline-9WeA8b0a.mjs} +1 -1
- package/dist/{bylines-DhCnhR70.mjs → bylines-B6QpwVAr.mjs} +2 -2
- package/dist/{bylines--KurdDQK.d.mts → bylines-CCkI7Rh3.d.mts} +76 -65
- package/dist/{cache-inQvbrP5.mjs → cache-BhJYDPP8.mjs} +1 -1
- package/dist/cli/index.mjs +11 -11
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/{context-CT44ux1O.mjs → context-DRq-f4sM.mjs} +2 -2
- package/dist/{context-CGbVhAmd.mjs → context-oSCcgE1U.mjs} +2 -2
- package/dist/{hitl-requests-CUnch_4e.mjs → hitl-requests-CJBs03Ep.mjs} +1 -1
- package/dist/{hitl-route-helpers-DcUCm57p.mjs → hitl-route-helpers-kTkP1NJ7.mjs} +1 -1
- package/dist/{import-BVqG28WP.mjs → import-B8lnqfnN.mjs} +1 -1
- package/dist/{import-DE2ziezs.mjs → import-BO_gy5vZ.mjs} +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +41 -41
- package/dist/{jsonld-BjsoTL5m.d.mts → jsonld-CvXmIBls.d.mts} +2 -2
- package/dist/media/index.mjs +2 -2
- package/dist/media/local-runtime.d.mts +2 -2
- package/dist/{media-allowlist-eS3AZ2L_.mjs → media-allowlist-vdlqBR-8.mjs} +1 -1
- package/dist/{menus-BDW1yIdj.mjs → menus-BTOa-tsI.mjs} +3 -3
- package/dist/menus-DXaFTRyU.mjs +720 -0
- package/dist/page/index.d.mts +1 -1
- package/dist/page/index.mjs +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +2 -2
- package/dist/{plugins-DKceDtUM.mjs → plugins-CxUx-b5a.mjs} +1 -1
- package/dist/{query-BtuwuZRd.mjs → query-CH1GaJmt.mjs} +3 -3
- package/dist/{query-CWPxZjGM.mjs → query-TQqoOaxy.mjs} +7 -7
- package/dist/{redirect-BHo9--Jz.mjs → redirect-hKO66LS_.mjs} +1 -1
- package/dist/{redirects-xVDvj_yQ.mjs → redirects-BO0fI750.mjs} +30 -22
- package/dist/{redirects-Bc40BgxA.mjs → redirects-CvIzUvek.mjs} +3 -3
- package/dist/{registry-DumDzFDn.mjs → registry-CYO6XQ-4.mjs} +3 -3
- package/dist/{runtime-B5hJAnKF.d.mts → runtime-DY_XmE9Y.d.mts} +2 -2
- package/dist/runtime.d.mts +3 -3
- package/dist/runtime.mjs +1 -1
- package/dist/{schema-D1z41cq_.mjs → schema-mjeMcn_6.mjs} +1 -1
- package/dist/{search-CPcQGTHW.mjs → search-vzCYAk0F.mjs} +2 -2
- package/dist/{sections-B9RYyf3I.mjs → sections-DA3GMhNG.mjs} +1 -1
- package/dist/seed/index.mjs +11 -11
- package/dist/{seo-BPz1KkCq.mjs → seo-DASNc4gD.mjs} +1 -1
- package/dist/{seo-contributions-CQzUjJKY.mjs → seo-contributions-BG4TtU7H.mjs} +5 -5
- package/dist/{settings-BGCo_c2y.mjs → settings-BJW_lmrM.mjs} +1 -1
- package/dist/{settings-qPzY2KIF.mjs → settings-D2k1JraC.mjs} +13 -2
- package/dist/{site-context-DHRIU6x9.mjs → site-context-CyBvmvQY.mjs} +7 -7
- package/dist/{ssrf-BOSGjXxb.mjs → ssrf-z3oH8wjK.mjs} +4 -4
- package/dist/{taxonomies-aQXvYVPm.mjs → taxonomies-CagluJHp.mjs} +2 -2
- package/dist/{taxonomies-BWmxbumf.mjs → taxonomies-DPNIwTGk.mjs} +4 -4
- package/dist/{taxonomy-DI-0HgKe.mjs → taxonomy-DpXdVSSR.mjs} +1 -1
- package/dist/ui/server-runtime.d.mts +6 -3
- package/dist/ui/server-runtime.mjs +53 -12
- package/dist/{validate-B8ZvLeOE.mjs → validate-CaKEnLed.mjs} +1 -1
- package/dist/version-CGRX_5CT.mjs +6 -0
- package/dist/{widgets-Cce2-2fM.mjs → widgets-D7UK-2hW.mjs} +1 -1
- package/dist/{wordpress-slugs-C4EhE6fo.mjs → wordpress-slugs-Bnf3-sf8.mjs} +1 -1
- package/dist/{zod-generator-BKhtHT3e.mjs → zod-generator-vOxhed6n.mjs} +1 -1
- package/package.json +7 -6
- package/src/components/DinewayHead.astro +11 -3
- package/dist/menus-CwI7DQJ5.mjs +0 -569
- package/dist/version-CjsyxeBD.mjs +0 -6
- /package/dist/{chunks-vkrCT4Ta.mjs → chunks-BjOMG4LF.mjs} +0 -0
- /package/dist/{context-types-DuiyY6xF.mjs → context-types-BWspNMDr.mjs} +0 -0
- /package/dist/{dashboard-6gH7SlPM.mjs → dashboard-DdqRifyu.mjs} +0 -0
- /package/dist/{fts-manager-D7KVeBmg.mjs → fts-manager-DYRy6HVi.mjs} +0 -0
- /package/dist/{hash-V8oZo1W2.mjs → hash-DHSsP6_G.mjs} +0 -0
- /package/dist/{loader-CQFxFOt1.mjs → loader-dt5DoyI1.mjs} +0 -0
- /package/dist/{mime-DJOFDGux.mjs → mime-DltzYYAL.mjs} +0 -0
- /package/dist/{normalize-9GU-bv_T.mjs → normalize-ba36HTxZ.mjs} +0 -0
- /package/dist/{patterns-CW4n2PQs.mjs → patterns-BKmjvM7K.mjs} +0 -0
- /package/dist/{placeholder-BJPmhjHP.mjs → placeholder-BAy3k441.mjs} +0 -0
- /package/dist/{provider-loader-D0F6E2qv.d.mts → provider-loader-BPhii_3H.d.mts} +0 -0
- /package/dist/{request-cache-DmVyQUBh.mjs → request-cache-BzuhyUXj.mjs} +0 -0
- /package/dist/{review-requests-vCw7_3DS.mjs → review-requests-CO-vO0O0.mjs} +0 -0
- /package/dist/{seo-DJoop90w.mjs → seo-Dl4QE4El.mjs} +0 -0
- /package/dist/{transport-CyOHECBA.d.mts → transport-DA3H3xB4.d.mts} +0 -0
- /package/dist/{types-Dz2EKzsX.mjs → types-zfg8SDVI.mjs} +0 -0
package/dist/menus-CwI7DQJ5.mjs
DELETED
|
@@ -1,569 +0,0 @@
|
|
|
1
|
-
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
-
import { n as getI18nConfig } from "./config-XW5tMrH8.mjs";
|
|
3
|
-
import { t as withTransaction } from "./transaction-qfqpPVpu.mjs";
|
|
4
|
-
import { ulid } from "ulidx";
|
|
5
|
-
|
|
6
|
-
//#region src/api/handlers/menus.ts
|
|
7
|
-
var menus_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
-
handleMenuCreate: () => handleMenuCreate,
|
|
9
|
-
handleMenuDelete: () => handleMenuDelete,
|
|
10
|
-
handleMenuGet: () => handleMenuGet,
|
|
11
|
-
handleMenuItemCreate: () => handleMenuItemCreate,
|
|
12
|
-
handleMenuItemDelete: () => handleMenuItemDelete,
|
|
13
|
-
handleMenuItemReorder: () => handleMenuItemReorder,
|
|
14
|
-
handleMenuItemUpdate: () => handleMenuItemUpdate,
|
|
15
|
-
handleMenuList: () => handleMenuList,
|
|
16
|
-
handleMenuSetItems: () => handleMenuSetItems,
|
|
17
|
-
handleMenuTranslations: () => handleMenuTranslations,
|
|
18
|
-
handleMenuUpdate: () => handleMenuUpdate
|
|
19
|
-
});
|
|
20
|
-
/**
|
|
21
|
-
* Error returned when a menu lookup by `name` matches multiple locale
|
|
22
|
-
* variants and the caller did not pass `locale` to disambiguate. Maps to
|
|
23
|
-
* HTTP 400 via `mapErrorStatus`. The available locales are surfaced in the
|
|
24
|
-
* message so MCP/REST callers can recover by re-issuing with `locale`.
|
|
25
|
-
*/
|
|
26
|
-
function ambiguousMenuLocaleError(name, locales) {
|
|
27
|
-
return {
|
|
28
|
-
success: false,
|
|
29
|
-
error: {
|
|
30
|
-
code: "AMBIGUOUS_LOCALE",
|
|
31
|
-
message: `Menu '${name}' exists in multiple locales (${locales.toSorted().join(", ")}); pass 'locale' to disambiguate.`
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* List menus with item counts. Filter by `locale` when provided; otherwise
|
|
37
|
-
* return every menu row (each locale counts as its own menu for admin listing
|
|
38
|
-
* purposes).
|
|
39
|
-
*/
|
|
40
|
-
async function handleMenuList(db, options = {}) {
|
|
41
|
-
try {
|
|
42
|
-
let query = db.selectFrom("_dineway_menus as m").leftJoin("_dineway_menu_items as i", "i.menu_id", "m.id").select(({ fn }) => [
|
|
43
|
-
"m.id",
|
|
44
|
-
"m.name",
|
|
45
|
-
"m.label",
|
|
46
|
-
"m.created_at",
|
|
47
|
-
"m.updated_at",
|
|
48
|
-
"m.locale",
|
|
49
|
-
"m.translation_group",
|
|
50
|
-
fn.count("i.id").as("itemCount")
|
|
51
|
-
]).groupBy([
|
|
52
|
-
"m.id",
|
|
53
|
-
"m.name",
|
|
54
|
-
"m.label",
|
|
55
|
-
"m.created_at",
|
|
56
|
-
"m.updated_at",
|
|
57
|
-
"m.locale",
|
|
58
|
-
"m.translation_group"
|
|
59
|
-
]).orderBy("m.name", "asc");
|
|
60
|
-
if (options.locale !== void 0) query = query.where("m.locale", "=", options.locale);
|
|
61
|
-
return {
|
|
62
|
-
success: true,
|
|
63
|
-
data: (await query.execute()).map((row) => ({
|
|
64
|
-
id: row.id,
|
|
65
|
-
name: row.name,
|
|
66
|
-
label: row.label,
|
|
67
|
-
created_at: row.created_at,
|
|
68
|
-
updated_at: row.updated_at,
|
|
69
|
-
locale: row.locale,
|
|
70
|
-
translation_group: row.translation_group,
|
|
71
|
-
itemCount: typeof row.itemCount === "string" ? Number(row.itemCount) : row.itemCount
|
|
72
|
-
}))
|
|
73
|
-
};
|
|
74
|
-
} catch {
|
|
75
|
-
return {
|
|
76
|
-
success: false,
|
|
77
|
-
error: {
|
|
78
|
-
code: "MENU_LIST_ERROR",
|
|
79
|
-
message: "Failed to fetch menus"
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Create a new menu. When `translationOf` is supplied the new menu joins the
|
|
86
|
-
* source menu's translation_group (and gets the source's items cloned).
|
|
87
|
-
*/
|
|
88
|
-
async function handleMenuCreate(db, input) {
|
|
89
|
-
try {
|
|
90
|
-
if (input.translationOf && !input.locale) return {
|
|
91
|
-
success: false,
|
|
92
|
-
error: {
|
|
93
|
-
code: "VALIDATION_ERROR",
|
|
94
|
-
message: "`locale` is required when `translationOf` is provided"
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
let translationGroup = null;
|
|
98
|
-
let sourceMenu = null;
|
|
99
|
-
if (input.translationOf) {
|
|
100
|
-
const src = await db.selectFrom("_dineway_menus").selectAll().where("id", "=", input.translationOf).executeTakeFirst();
|
|
101
|
-
if (!src) return {
|
|
102
|
-
success: false,
|
|
103
|
-
error: {
|
|
104
|
-
code: "NOT_FOUND",
|
|
105
|
-
message: "Source menu for translation not found"
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
sourceMenu = src;
|
|
109
|
-
translationGroup = src.translation_group ?? src.id;
|
|
110
|
-
}
|
|
111
|
-
const effectiveLocale = input.locale ?? getI18nConfig()?.defaultLocale ?? "en";
|
|
112
|
-
if (await db.selectFrom("_dineway_menus").select("id").where("name", "=", input.name).where("locale", "=", effectiveLocale).executeTakeFirst()) return {
|
|
113
|
-
success: false,
|
|
114
|
-
error: {
|
|
115
|
-
code: "CONFLICT",
|
|
116
|
-
message: `Menu "${input.name}" already exists${input.locale ? ` in locale "${input.locale}"` : ""}`
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
const id = ulid();
|
|
120
|
-
await withTransaction(db, async (trx) => {
|
|
121
|
-
await trx.insertInto("_dineway_menus").values({
|
|
122
|
-
id,
|
|
123
|
-
name: input.name,
|
|
124
|
-
label: input.label,
|
|
125
|
-
...input.locale !== void 0 ? { locale: input.locale } : {},
|
|
126
|
-
translation_group: translationGroup ?? id
|
|
127
|
-
}).execute();
|
|
128
|
-
if (sourceMenu) {
|
|
129
|
-
const sourceItems = await trx.selectFrom("_dineway_menu_items").selectAll().where("menu_id", "=", sourceMenu.id).orderBy("sort_order", "asc").execute();
|
|
130
|
-
if (sourceItems.length > 0) {
|
|
131
|
-
const idMap = /* @__PURE__ */ new Map();
|
|
132
|
-
for (const item of sourceItems) idMap.set(item.id, ulid());
|
|
133
|
-
await trx.insertInto("_dineway_menu_items").values(sourceItems.map((item) => {
|
|
134
|
-
return {
|
|
135
|
-
id: idMap.get(item.id),
|
|
136
|
-
menu_id: id,
|
|
137
|
-
parent_id: item.parent_id ? idMap.get(item.parent_id) ?? null : null,
|
|
138
|
-
sort_order: item.sort_order,
|
|
139
|
-
type: item.type,
|
|
140
|
-
reference_collection: item.reference_collection,
|
|
141
|
-
reference_id: item.reference_id,
|
|
142
|
-
custom_url: item.custom_url,
|
|
143
|
-
label: item.label,
|
|
144
|
-
title_attr: item.title_attr,
|
|
145
|
-
target: item.target,
|
|
146
|
-
css_classes: item.css_classes,
|
|
147
|
-
...input.locale !== void 0 ? { locale: input.locale } : {},
|
|
148
|
-
translation_group: item.translation_group ?? item.id
|
|
149
|
-
};
|
|
150
|
-
})).execute();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
return {
|
|
155
|
-
success: true,
|
|
156
|
-
data: await db.selectFrom("_dineway_menus").selectAll().where("id", "=", id).executeTakeFirstOrThrow()
|
|
157
|
-
};
|
|
158
|
-
} catch {
|
|
159
|
-
return {
|
|
160
|
-
success: false,
|
|
161
|
-
error: {
|
|
162
|
-
code: "MENU_CREATE_ERROR",
|
|
163
|
-
message: "Failed to create menu"
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Get a single menu by name. Honours an optional `locale` filter; when two
|
|
170
|
-
* menus share a name across locales, the locale distinguishes them.
|
|
171
|
-
*/
|
|
172
|
-
async function handleMenuGet(db, name, options = {}) {
|
|
173
|
-
try {
|
|
174
|
-
let query = db.selectFrom("_dineway_menus").selectAll().where("name", "=", name);
|
|
175
|
-
if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
|
|
176
|
-
const menu = await query.orderBy("locale", "asc").executeTakeFirst();
|
|
177
|
-
if (!menu) return {
|
|
178
|
-
success: false,
|
|
179
|
-
error: {
|
|
180
|
-
code: "NOT_FOUND",
|
|
181
|
-
message: `Menu '${name}' not found`
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
const items = await db.selectFrom("_dineway_menu_items").selectAll().where("menu_id", "=", menu.id).orderBy("sort_order", "asc").execute();
|
|
185
|
-
return {
|
|
186
|
-
success: true,
|
|
187
|
-
data: {
|
|
188
|
-
...menu,
|
|
189
|
-
items
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
} catch {
|
|
193
|
-
return {
|
|
194
|
-
success: false,
|
|
195
|
-
error: {
|
|
196
|
-
code: "MENU_GET_ERROR",
|
|
197
|
-
message: "Failed to fetch menu"
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Update a menu's label. The name + locale are immutable.
|
|
204
|
-
*/
|
|
205
|
-
async function handleMenuUpdate(db, name, input) {
|
|
206
|
-
try {
|
|
207
|
-
let query = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", name);
|
|
208
|
-
if (input.locale !== void 0) query = query.where("locale", "=", input.locale);
|
|
209
|
-
const matches = await query.execute();
|
|
210
|
-
if (matches.length === 0) return {
|
|
211
|
-
success: false,
|
|
212
|
-
error: {
|
|
213
|
-
code: "NOT_FOUND",
|
|
214
|
-
message: `Menu '${name}' not found${input.locale ? ` in locale '${input.locale}'` : ""}`
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(name, matches.map((m) => m.locale));
|
|
218
|
-
const menu = matches[0];
|
|
219
|
-
if (input.label) await db.updateTable("_dineway_menus").set({ label: input.label }).where("id", "=", menu.id).execute();
|
|
220
|
-
return {
|
|
221
|
-
success: true,
|
|
222
|
-
data: await db.selectFrom("_dineway_menus").selectAll().where("id", "=", menu.id).executeTakeFirstOrThrow()
|
|
223
|
-
};
|
|
224
|
-
} catch {
|
|
225
|
-
return {
|
|
226
|
-
success: false,
|
|
227
|
-
error: {
|
|
228
|
-
code: "MENU_UPDATE_ERROR",
|
|
229
|
-
message: "Failed to update menu"
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Delete a menu (and items, via cascade).
|
|
236
|
-
*/
|
|
237
|
-
async function handleMenuDelete(db, name, options = {}) {
|
|
238
|
-
try {
|
|
239
|
-
let query = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", name);
|
|
240
|
-
if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
|
|
241
|
-
const matches = await query.execute();
|
|
242
|
-
if (matches.length === 0) return {
|
|
243
|
-
success: false,
|
|
244
|
-
error: {
|
|
245
|
-
code: "NOT_FOUND",
|
|
246
|
-
message: `Menu '${name}' not found${options.locale ? ` in locale '${options.locale}'` : ""}`
|
|
247
|
-
}
|
|
248
|
-
};
|
|
249
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(name, matches.map((m) => m.locale));
|
|
250
|
-
const menu = matches[0];
|
|
251
|
-
await db.deleteFrom("_dineway_menu_items").where("menu_id", "=", menu.id).execute();
|
|
252
|
-
await db.deleteFrom("_dineway_menus").where("id", "=", menu.id).execute();
|
|
253
|
-
return {
|
|
254
|
-
success: true,
|
|
255
|
-
data: { deleted: true }
|
|
256
|
-
};
|
|
257
|
-
} catch {
|
|
258
|
-
return {
|
|
259
|
-
success: false,
|
|
260
|
-
error: {
|
|
261
|
-
code: "MENU_DELETE_ERROR",
|
|
262
|
-
message: "Failed to delete menu"
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* List every translation of a menu (by id or translation_group).
|
|
269
|
-
*/
|
|
270
|
-
async function handleMenuTranslations(db, idOrGroup) {
|
|
271
|
-
try {
|
|
272
|
-
const anchor = await db.selectFrom("_dineway_menus").selectAll().where((eb) => eb.or([eb("id", "=", idOrGroup), eb("translation_group", "=", idOrGroup)])).executeTakeFirst();
|
|
273
|
-
if (!anchor) return {
|
|
274
|
-
success: false,
|
|
275
|
-
error: {
|
|
276
|
-
code: "NOT_FOUND",
|
|
277
|
-
message: "Menu not found"
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
const group = anchor.translation_group ?? anchor.id;
|
|
281
|
-
return {
|
|
282
|
-
success: true,
|
|
283
|
-
data: {
|
|
284
|
-
translationGroup: group,
|
|
285
|
-
translations: (await db.selectFrom("_dineway_menus").selectAll().where("translation_group", "=", group).orderBy("locale", "asc").execute()).map((row) => ({
|
|
286
|
-
id: row.id,
|
|
287
|
-
name: row.name,
|
|
288
|
-
locale: row.locale,
|
|
289
|
-
label: row.label,
|
|
290
|
-
updatedAt: row.updated_at
|
|
291
|
-
}))
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
} catch {
|
|
295
|
-
return {
|
|
296
|
-
success: false,
|
|
297
|
-
error: {
|
|
298
|
-
code: "MENU_TRANSLATIONS_ERROR",
|
|
299
|
-
message: "Failed to list menu translations"
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Add an item to a menu. The item inherits the menu's locale (so listing
|
|
306
|
-
* items by locale stays trivial).
|
|
307
|
-
*/
|
|
308
|
-
async function handleMenuItemCreate(db, menuName, input, options = {}) {
|
|
309
|
-
try {
|
|
310
|
-
let menuQuery = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", menuName);
|
|
311
|
-
if (options.locale !== void 0) menuQuery = menuQuery.where("locale", "=", options.locale);
|
|
312
|
-
const matches = await menuQuery.execute();
|
|
313
|
-
if (matches.length === 0) return {
|
|
314
|
-
success: false,
|
|
315
|
-
error: {
|
|
316
|
-
code: "NOT_FOUND",
|
|
317
|
-
message: "Menu not found"
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(menuName, matches.map((m) => m.locale));
|
|
321
|
-
const menu = matches[0];
|
|
322
|
-
let sortOrder = input.sortOrder ?? 0;
|
|
323
|
-
if (input.sortOrder === void 0) sortOrder = ((await db.selectFrom("_dineway_menu_items").select(({ fn }) => fn.max("sort_order").as("max")).where("menu_id", "=", menu.id).where("parent_id", "is", input.parentId ?? null).executeTakeFirst())?.max ?? -1) + 1;
|
|
324
|
-
const id = ulid();
|
|
325
|
-
await db.insertInto("_dineway_menu_items").values({
|
|
326
|
-
id,
|
|
327
|
-
menu_id: menu.id,
|
|
328
|
-
parent_id: input.parentId ?? null,
|
|
329
|
-
sort_order: sortOrder,
|
|
330
|
-
type: input.type,
|
|
331
|
-
reference_collection: input.referenceCollection ?? null,
|
|
332
|
-
reference_id: input.referenceId ?? null,
|
|
333
|
-
custom_url: input.customUrl ?? null,
|
|
334
|
-
label: input.label,
|
|
335
|
-
title_attr: input.titleAttr ?? null,
|
|
336
|
-
target: input.target ?? null,
|
|
337
|
-
css_classes: input.cssClasses ?? null,
|
|
338
|
-
locale: menu.locale,
|
|
339
|
-
translation_group: id
|
|
340
|
-
}).execute();
|
|
341
|
-
return {
|
|
342
|
-
success: true,
|
|
343
|
-
data: await db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", id).executeTakeFirstOrThrow()
|
|
344
|
-
};
|
|
345
|
-
} catch {
|
|
346
|
-
return {
|
|
347
|
-
success: false,
|
|
348
|
-
error: {
|
|
349
|
-
code: "MENU_ITEM_CREATE_ERROR",
|
|
350
|
-
message: "Failed to create menu item"
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Update a menu item.
|
|
357
|
-
*/
|
|
358
|
-
async function handleMenuItemUpdate(db, menuName, itemId, input, options = {}) {
|
|
359
|
-
try {
|
|
360
|
-
let menuQuery = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", menuName);
|
|
361
|
-
if (options.locale !== void 0) menuQuery = menuQuery.where("locale", "=", options.locale);
|
|
362
|
-
const matches = await menuQuery.execute();
|
|
363
|
-
if (matches.length === 0) return {
|
|
364
|
-
success: false,
|
|
365
|
-
error: {
|
|
366
|
-
code: "NOT_FOUND",
|
|
367
|
-
message: "Menu not found"
|
|
368
|
-
}
|
|
369
|
-
};
|
|
370
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(menuName, matches.map((m) => m.locale));
|
|
371
|
-
const menu = matches[0];
|
|
372
|
-
if (!await db.selectFrom("_dineway_menu_items").select("id").where("id", "=", itemId).where("menu_id", "=", menu.id).executeTakeFirst()) return {
|
|
373
|
-
success: false,
|
|
374
|
-
error: {
|
|
375
|
-
code: "NOT_FOUND",
|
|
376
|
-
message: "Menu item not found"
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
const updates = {};
|
|
380
|
-
if (input.label !== void 0) updates.label = input.label;
|
|
381
|
-
if (input.customUrl !== void 0) updates.custom_url = input.customUrl;
|
|
382
|
-
if (input.target !== void 0) updates.target = input.target;
|
|
383
|
-
if (input.titleAttr !== void 0) updates.title_attr = input.titleAttr;
|
|
384
|
-
if (input.cssClasses !== void 0) updates.css_classes = input.cssClasses;
|
|
385
|
-
if (input.parentId !== void 0) updates.parent_id = input.parentId;
|
|
386
|
-
if (input.sortOrder !== void 0) updates.sort_order = input.sortOrder;
|
|
387
|
-
if (Object.keys(updates).length > 0) await db.updateTable("_dineway_menu_items").set(updates).where("id", "=", itemId).execute();
|
|
388
|
-
return {
|
|
389
|
-
success: true,
|
|
390
|
-
data: await db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", itemId).executeTakeFirstOrThrow()
|
|
391
|
-
};
|
|
392
|
-
} catch {
|
|
393
|
-
return {
|
|
394
|
-
success: false,
|
|
395
|
-
error: {
|
|
396
|
-
code: "MENU_ITEM_UPDATE_ERROR",
|
|
397
|
-
message: "Failed to update menu item"
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Delete a menu item.
|
|
404
|
-
*/
|
|
405
|
-
async function handleMenuItemDelete(db, menuName, itemId, options = {}) {
|
|
406
|
-
try {
|
|
407
|
-
let menuQuery = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", menuName);
|
|
408
|
-
if (options.locale !== void 0) menuQuery = menuQuery.where("locale", "=", options.locale);
|
|
409
|
-
const matches = await menuQuery.execute();
|
|
410
|
-
if (matches.length === 0) return {
|
|
411
|
-
success: false,
|
|
412
|
-
error: {
|
|
413
|
-
code: "NOT_FOUND",
|
|
414
|
-
message: "Menu not found"
|
|
415
|
-
}
|
|
416
|
-
};
|
|
417
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(menuName, matches.map((m) => m.locale));
|
|
418
|
-
const menu = matches[0];
|
|
419
|
-
if ((await db.deleteFrom("_dineway_menu_items").where("id", "=", itemId).where("menu_id", "=", menu.id).execute())[0]?.numDeletedRows === 0n) return {
|
|
420
|
-
success: false,
|
|
421
|
-
error: {
|
|
422
|
-
code: "NOT_FOUND",
|
|
423
|
-
message: "Menu item not found"
|
|
424
|
-
}
|
|
425
|
-
};
|
|
426
|
-
return {
|
|
427
|
-
success: true,
|
|
428
|
-
data: { deleted: true }
|
|
429
|
-
};
|
|
430
|
-
} catch {
|
|
431
|
-
return {
|
|
432
|
-
success: false,
|
|
433
|
-
error: {
|
|
434
|
-
code: "MENU_ITEM_DELETE_ERROR",
|
|
435
|
-
message: "Failed to delete menu item"
|
|
436
|
-
}
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Replace the entire set of items for a menu in one atomic transaction.
|
|
442
|
-
*
|
|
443
|
-
* Existing items are deleted and the new list is inserted in the order
|
|
444
|
-
* provided. `parentIndex` references resolve to actual parent IDs as the
|
|
445
|
-
* insert proceeds.
|
|
446
|
-
*/
|
|
447
|
-
async function handleMenuSetItems(db, menuName, items, options = {}) {
|
|
448
|
-
for (let i = 0; i < items.length; i++) {
|
|
449
|
-
const item = items[i];
|
|
450
|
-
if (item?.parentIndex !== void 0) {
|
|
451
|
-
if (item.parentIndex < 0 || item.parentIndex >= i) return {
|
|
452
|
-
success: false,
|
|
453
|
-
error: {
|
|
454
|
-
code: "VALIDATION_ERROR",
|
|
455
|
-
message: `item[${i}].parentIndex (${item.parentIndex}) must reference an earlier item`
|
|
456
|
-
}
|
|
457
|
-
};
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
try {
|
|
461
|
-
const notFoundSentinel = Symbol("menu-not-found");
|
|
462
|
-
let ambiguousLocales = null;
|
|
463
|
-
const ambiguousSentinel = Symbol("menu-ambiguous-locale");
|
|
464
|
-
try {
|
|
465
|
-
await withTransaction(db, async (trx) => {
|
|
466
|
-
let menuQuery = trx.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", menuName);
|
|
467
|
-
if (options.locale !== void 0) menuQuery = menuQuery.where("locale", "=", options.locale);
|
|
468
|
-
const matches = await menuQuery.execute();
|
|
469
|
-
if (matches.length === 0) throw notFoundSentinel;
|
|
470
|
-
if (matches.length > 1) {
|
|
471
|
-
ambiguousLocales = matches.map((m) => m.locale);
|
|
472
|
-
throw ambiguousSentinel;
|
|
473
|
-
}
|
|
474
|
-
const menu = matches[0];
|
|
475
|
-
await trx.deleteFrom("_dineway_menu_items").where("menu_id", "=", menu.id).execute();
|
|
476
|
-
const insertedIds = [];
|
|
477
|
-
for (let i = 0; i < items.length; i++) {
|
|
478
|
-
const item = items[i];
|
|
479
|
-
if (!item) continue;
|
|
480
|
-
const id = ulid();
|
|
481
|
-
const parentId = item.parentIndex !== void 0 ? insertedIds[item.parentIndex] ?? null : null;
|
|
482
|
-
await trx.insertInto("_dineway_menu_items").values({
|
|
483
|
-
id,
|
|
484
|
-
menu_id: menu.id,
|
|
485
|
-
parent_id: parentId,
|
|
486
|
-
sort_order: i,
|
|
487
|
-
type: item.type,
|
|
488
|
-
reference_collection: item.referenceCollection ?? null,
|
|
489
|
-
reference_id: item.referenceId ?? null,
|
|
490
|
-
custom_url: item.customUrl ?? null,
|
|
491
|
-
label: item.label,
|
|
492
|
-
title_attr: item.titleAttr ?? null,
|
|
493
|
-
target: item.target ?? null,
|
|
494
|
-
css_classes: item.cssClasses ?? null,
|
|
495
|
-
locale: menu.locale
|
|
496
|
-
}).execute();
|
|
497
|
-
insertedIds.push(id);
|
|
498
|
-
}
|
|
499
|
-
await trx.updateTable("_dineway_menus").set({ updated_at: (/* @__PURE__ */ new Date()).toISOString() }).where("id", "=", menu.id).execute();
|
|
500
|
-
});
|
|
501
|
-
} catch (error) {
|
|
502
|
-
if (error === notFoundSentinel) return {
|
|
503
|
-
success: false,
|
|
504
|
-
error: {
|
|
505
|
-
code: "NOT_FOUND",
|
|
506
|
-
message: `Menu '${menuName}' not found${options.locale ? ` in locale '${options.locale}'` : ""}`
|
|
507
|
-
}
|
|
508
|
-
};
|
|
509
|
-
if (error === ambiguousSentinel && ambiguousLocales) return ambiguousMenuLocaleError(menuName, ambiguousLocales);
|
|
510
|
-
throw error;
|
|
511
|
-
}
|
|
512
|
-
return {
|
|
513
|
-
success: true,
|
|
514
|
-
data: {
|
|
515
|
-
name: menuName,
|
|
516
|
-
itemCount: items.length
|
|
517
|
-
}
|
|
518
|
-
};
|
|
519
|
-
} catch (error) {
|
|
520
|
-
console.error("[dineway] handleMenuSetItems failed:", error);
|
|
521
|
-
return {
|
|
522
|
-
success: false,
|
|
523
|
-
error: {
|
|
524
|
-
code: "MENU_SET_ITEMS_ERROR",
|
|
525
|
-
message: "Failed to set menu items"
|
|
526
|
-
}
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* Batch reorder menu items.
|
|
532
|
-
*/
|
|
533
|
-
async function handleMenuItemReorder(db, menuName, items, options = {}) {
|
|
534
|
-
try {
|
|
535
|
-
let menuQuery = db.selectFrom("_dineway_menus").select(["id", "locale"]).where("name", "=", menuName);
|
|
536
|
-
if (options.locale !== void 0) menuQuery = menuQuery.where("locale", "=", options.locale);
|
|
537
|
-
const matches = await menuQuery.execute();
|
|
538
|
-
if (matches.length === 0) return {
|
|
539
|
-
success: false,
|
|
540
|
-
error: {
|
|
541
|
-
code: "NOT_FOUND",
|
|
542
|
-
message: "Menu not found"
|
|
543
|
-
}
|
|
544
|
-
};
|
|
545
|
-
if (matches.length > 1) return ambiguousMenuLocaleError(menuName, matches.map((m) => m.locale));
|
|
546
|
-
const menu = matches[0];
|
|
547
|
-
return {
|
|
548
|
-
success: true,
|
|
549
|
-
data: await withTransaction(db, async (trx) => {
|
|
550
|
-
for (const item of items) await trx.updateTable("_dineway_menu_items").set({
|
|
551
|
-
parent_id: item.parentId,
|
|
552
|
-
sort_order: item.sortOrder
|
|
553
|
-
}).where("id", "=", item.id).where("menu_id", "=", menu.id).execute();
|
|
554
|
-
return trx.selectFrom("_dineway_menu_items").selectAll().where("menu_id", "=", menu.id).orderBy("sort_order", "asc").execute();
|
|
555
|
-
})
|
|
556
|
-
};
|
|
557
|
-
} catch {
|
|
558
|
-
return {
|
|
559
|
-
success: false,
|
|
560
|
-
error: {
|
|
561
|
-
code: "MENU_REORDER_ERROR",
|
|
562
|
-
message: "Failed to reorder menu items"
|
|
563
|
-
}
|
|
564
|
-
};
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
//#endregion
|
|
569
|
-
export { handleMenuItemDelete as a, handleMenuList as c, menus_exports as d, handleMenuItemCreate as i, handleMenuTranslations as l, handleMenuDelete as n, handleMenuItemReorder as o, handleMenuGet as r, handleMenuItemUpdate as s, handleMenuCreate as t, handleMenuUpdate as u };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|