b34b0dd7d6
Validators (Pushes and Pull Requests) / UI & Storage Validation (pull_request) Failing after 12s
Validators (Pushes and Pull Requests) / Database & Schema Validation (pull_request) Successful in 13s
Validators (Pushes and Pull Requests) / Core Validators & Database Setup (pull_request) Failing after 28s
Validators (Pushes and Pull Requests) / WBS & Audit Validations (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / .NET Contracts (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Calibration & Performance (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Operational Report & Decision Packet (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / CI Workflow Lint (pull_request) Failing after 10s
Validators (Pushes and Pull Requests) / Security & Secrets (pull_request) Successful in 12s
Validators (Pushes and Pull Requests) / Notify PR Results (pull_request) Successful in 2s
Frontend CI Pipeline / ci-frontend-8-steps (pull_request) Failing after 2m50s
165 lines
4.1 KiB
JavaScript
165 lines
4.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
const storeName = process.argv[2]
|
|
const storeType = process.argv[3] || 'default'
|
|
|
|
if (!storeName) {
|
|
console.error('Usage: node scripts/generate-store.mjs StoreName [type]')
|
|
process.exit(1)
|
|
}
|
|
|
|
const storeDir = `src/stores/modules`
|
|
const fileName = `${storeName.charAt(0).toLowerCase()}${storeName.slice(1)}.ts`
|
|
|
|
if (!fs.existsSync(storeDir)) {
|
|
fs.mkdirSync(storeDir, { recursive: true })
|
|
}
|
|
|
|
// Store templates by type
|
|
const templates = {
|
|
default: `/**
|
|
* Pinia Store: ${storeName}
|
|
* State management for ${storeName.toLowerCase()}-related data
|
|
*/
|
|
|
|
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
|
|
export const use${storeName}Store = defineStore('${fileName.replace('.ts', '')}', () => {
|
|
// State
|
|
const items = ref<any[]>([])
|
|
const selectedItem = ref<any | null>(null)
|
|
const loading = ref(false)
|
|
const error = ref<string | null>(null)
|
|
const filters = ref<Record<string, any>>({})
|
|
|
|
// Computed
|
|
const itemCount = computed(() => items.value.length)
|
|
const filteredItems = computed(() => items.value)
|
|
|
|
// Actions
|
|
const fetchItems = async (limit = 100, offset = 0) => {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
// TODO: Call API endpoint
|
|
// const response = await ${fileName.replace('.ts', '')}Api.list${storeName}({ limit, offset })
|
|
// items.value = response.data
|
|
} catch (err) {
|
|
error.value = (err as Error).message
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const fetchItemById = async (itemId: string) => {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
// TODO: Call API endpoint
|
|
// const response = await ${fileName.replace('.ts', '')}Api.get${storeName}(itemId)
|
|
// selectedItem.value = response.data
|
|
} catch (err) {
|
|
error.value = (err as Error).message
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const createItem = async (payload: any) => {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
// TODO: Call API endpoint
|
|
// const response = await ${fileName.replace('.ts', '')}Api.create${storeName}(payload)
|
|
// items.value.push(response.data)
|
|
// selectedItem.value = response.data
|
|
// return response.data
|
|
} catch (err) {
|
|
error.value = (err as Error).message
|
|
throw err
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const updateItem = async (itemId: string, payload: any) => {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
// TODO: Call API endpoint
|
|
// const response = await ${fileName.replace('.ts', '')}Api.update${storeName}(itemId, payload)
|
|
// const index = items.value.findIndex((i) => i.id === itemId)
|
|
// if (index !== -1) items.value[index] = response.data
|
|
// if (selectedItem.value?.id === itemId) selectedItem.value = response.data
|
|
// return response.data
|
|
} catch (err) {
|
|
error.value = (err as Error).message
|
|
throw err
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const deleteItem = async (itemId: string) => {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
// TODO: Call API endpoint
|
|
// await ${fileName.replace('.ts', '')}Api.delete${storeName}(itemId)
|
|
// items.value = items.value.filter((i) => i.id !== itemId)
|
|
// if (selectedItem.value?.id === itemId) selectedItem.value = null
|
|
} catch (err) {
|
|
error.value = (err as Error).message
|
|
throw err
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const setFilter = (key: string, value: any) => {
|
|
filters.value[key] = value
|
|
}
|
|
|
|
const clearFilters = () => {
|
|
filters.value = {}
|
|
}
|
|
|
|
return {
|
|
// State
|
|
items,
|
|
selectedItem,
|
|
loading,
|
|
error,
|
|
filters,
|
|
|
|
// Computed
|
|
itemCount,
|
|
filteredItems,
|
|
|
|
// Actions
|
|
fetchItems,
|
|
fetchItemById,
|
|
createItem,
|
|
updateItem,
|
|
deleteItem,
|
|
setFilter,
|
|
clearFilters
|
|
}
|
|
})
|
|
`
|
|
}
|
|
|
|
const template = templates[storeType] || templates.default
|
|
|
|
const storeFile = path.join(storeDir, fileName)
|
|
if (!fs.existsSync(storeFile)) {
|
|
fs.writeFileSync(storeFile, template)
|
|
console.log(`✓ Created: ${storeFile}`)
|
|
} else {
|
|
console.log(`⚠ Already exists: ${storeFile}`)
|
|
}
|