Initial commit: SQL audit platform v0.1.0

FastAPI backend with auth, user, instance, ticket, query, dashboard APIs.
React + TypeScript frontend with mock data UI (10 pages).
SQLite + async SQLAlchemy, JWT auth, role-based access control.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
loganandClaude Opus 4.7 committed 2026-05-22 11:11:57 +08:00
commit 439155c92e
290 files changed
+61950

No files matched your search

@@ -0,0 +1,63 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import type { User } from '@/types'
import { authApi } from '@/api'
export const useUserStore = defineStore('user', () => {
// State
const token = ref<string>(localStorage.getItem('token') || '')
const user = ref<User | null>(null)
// Getters
const isLoggedIn = computed(() => !!token.value)
const isAdmin = computed(() => user.value?.role === 'admin')
const isDBA = computed(() => user.value?.role === 'dba')
const canReview = computed(() => ['admin', 'dba'].includes(user.value?.role || ''))
// Actions
const setToken = (newToken: string) => {
token.value = newToken
localStorage.setItem('token', newToken)
}
const setUser = (newUser: User) => {
user.value = newUser
}
const login = async (username: string, password: string) => {
const response: any = await authApi.login({ username, password })
setToken(response.access_token)
setUser(response.user)
return response
}
const logout = async () => {
try {
await authApi.logout()
} finally {
token.value = ''
user.value = null
localStorage.removeItem('token')
}
}
const fetchUserInfo = async () => {
const response: any = await authApi.getMe()
setUser(response)
return response
}
return {
token,
user,
isLoggedIn,
isAdmin,
isDBA,
canReview,
setToken,
setUser,
login,
logout,
fetchUserInfo,
}
})