Add module management system for enabling/disabling features
Stores can enable/disable feature modules from Settings. When disabled, nav links are hidden and API routes return 403. Designed as the foundation for future license-based gating (licensed + enabled flags). Core modules (Accounts, Members, Users, Roles, Settings) are always on. - module_config table with slug, name, description, licensed, enabled - In-memory cache for fast per-request module checks - requireModule middleware wraps route groups in main.ts - Settings page Modules card with toggle switches - Sidebar hides nav links for disabled modules - Default modules seeded: inventory, pos, repairs, rentals, lessons, files, vault, email, reports
This commit is contained in:
28
packages/admin/src/api/modules.ts
Normal file
28
packages/admin/src/api/modules.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { queryOptions } from '@tanstack/react-query'
|
||||
import { api } from '@/lib/api-client'
|
||||
|
||||
export interface ModuleConfig {
|
||||
id: string
|
||||
slug: string
|
||||
name: string
|
||||
description: string | null
|
||||
licensed: boolean
|
||||
enabled: boolean
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export const moduleKeys = {
|
||||
list: ['modules'] as const,
|
||||
}
|
||||
|
||||
export function moduleListOptions() {
|
||||
return queryOptions({
|
||||
queryKey: moduleKeys.list,
|
||||
queryFn: () => api.get<{ data: ModuleConfig[] }>('/v1/modules'),
|
||||
})
|
||||
}
|
||||
|
||||
export const moduleMutations = {
|
||||
toggle: (slug: string, enabled: boolean) => api.patch<ModuleConfig>(`/v1/modules/${slug}`, { enabled }),
|
||||
}
|
||||
Reference in New Issue
Block a user