页面登录优化,team优化
This commit is contained in:
101
src/hooks/supabaseService.js
Normal file
101
src/hooks/supabaseService.js
Normal file
@@ -0,0 +1,101 @@
|
||||
import { supabase } from '@/config/supabase'
|
||||
|
||||
class SupabaseService {
|
||||
async get(table, options = {}) {
|
||||
try {
|
||||
let query = supabase
|
||||
.from(table)
|
||||
.select(options.select || '*', { count: 'exact' })
|
||||
|
||||
// 处理精确匹配条件
|
||||
if (options.match) {
|
||||
query = query.match(options.match)
|
||||
}
|
||||
|
||||
// 处理过滤条件
|
||||
if (options.filter) {
|
||||
Object.entries(options.filter).forEach(([key, condition]) => {
|
||||
Object.entries(condition).forEach(([operator, value]) => {
|
||||
query = query.filter(key, operator, value)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 处理排序
|
||||
if (options.order) {
|
||||
query = query.order(options.order.column, {
|
||||
ascending: options.order.ascending
|
||||
})
|
||||
}
|
||||
|
||||
// 处理分页
|
||||
if (options.page && options.pageSize) {
|
||||
const from = (options.page - 1) * options.pageSize
|
||||
const to = from + options.pageSize - 1
|
||||
query = query.range(from, to)
|
||||
}
|
||||
|
||||
const { data, error, count } = await query
|
||||
|
||||
if (error) throw error
|
||||
return {
|
||||
data,
|
||||
total: count || 0
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error fetching from ${table}:`, error.message)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 通用 INSERT 请求
|
||||
async insert(table, data) {
|
||||
try {
|
||||
const { data: result, error } = await supabase
|
||||
.from(table)
|
||||
.insert(data)
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return result
|
||||
} catch (error) {
|
||||
console.error(`Error inserting into ${table}:`, error.message)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 通用 UPDATE 请求
|
||||
async update(table, match, updates) {
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
.from(table)
|
||||
.update(updates)
|
||||
.match(match)
|
||||
.select()
|
||||
|
||||
if (error) throw error
|
||||
return data
|
||||
} catch (error) {
|
||||
console.error(`Error updating ${table}:`, error.message)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 通用 DELETE 请求
|
||||
async delete(table, match) {
|
||||
try {
|
||||
const { error } = await supabase
|
||||
.from(table)
|
||||
.delete()
|
||||
.match(match)
|
||||
|
||||
if (error) throw error
|
||||
return true
|
||||
} catch (error) {
|
||||
console.error(`Error deleting from ${table}:`, error.message)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const supabaseService = new SupabaseService()
|
||||
Reference in New Issue
Block a user