bunch of shit
This commit is contained in:
parent
3cf2ec38aa
commit
0f577eef4d
22 changed files with 2889 additions and 37 deletions
104
server/api/admin/audit-logs.get.ts
Normal file
104
server/api/admin/audit-logs.get.ts
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
import { query as queryAuthDb } from '../../utils/db'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const queryParams = getQuery(event)
|
||||
|
||||
const page = Math.max(1, parseInt(String(queryParams.page || '1'), 10))
|
||||
const limit = Math.max(1, Math.min(100, parseInt(String(queryParams.limit || '20'), 10)))
|
||||
const offset = (page - 1) * limit
|
||||
|
||||
const searchTerm = String(queryParams.q || queryParams.search || '').trim()
|
||||
const logType = String(queryParams.type || 'all').trim()
|
||||
const dateFrom = String(queryParams.from || '').trim()
|
||||
const dateTo = String(queryParams.to || '').trim()
|
||||
|
||||
try {
|
||||
const whereConditions: string[] = []
|
||||
const sqlParams: any[] = []
|
||||
let paramIndex = 1
|
||||
|
||||
if (searchTerm) {
|
||||
whereConditions.push(`(
|
||||
CAST(log_id AS TEXT) ILIKE $${paramIndex}
|
||||
OR editor_sfid ILIKE $${paramIndex}
|
||||
OR target_name ILIKE $${paramIndex}
|
||||
OR CAST(target_pid AS TEXT) ILIKE $${paramIndex}
|
||||
OR CAST(editor_pid AS TEXT) ILIKE $${paramIndex}
|
||||
OR changes::text ILIKE $${paramIndex}
|
||||
)`)
|
||||
sqlParams.push(`%${searchTerm}%`)
|
||||
paramIndex++
|
||||
}
|
||||
|
||||
if (logType === 'ban') {
|
||||
whereConditions.push(`(
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(
|
||||
CASE
|
||||
WHEN jsonb_typeof(changes::jsonb->'changes') = 'array'
|
||||
THEN changes::jsonb->'changes'
|
||||
ELSE '[]'::jsonb
|
||||
END
|
||||
) elem
|
||||
WHERE elem->>'field' = 'account_level'
|
||||
AND (elem->>'newVal')::numeric < 0
|
||||
)
|
||||
OR changes::text ILIKE '%"account_level"%' AND changes::text ILIKE '%"newVal":-%'
|
||||
)`)
|
||||
}
|
||||
|
||||
if (dateFrom) {
|
||||
whereConditions.push(`created_at >= $${paramIndex}`)
|
||||
sqlParams.push(dateFrom)
|
||||
paramIndex++
|
||||
}
|
||||
|
||||
if (dateTo) {
|
||||
whereConditions.push(`created_at <= $${paramIndex}`)
|
||||
sqlParams.push(`${dateTo} 23:59:59`)
|
||||
paramIndex++
|
||||
}
|
||||
|
||||
const whereClause = whereConditions.length > 0
|
||||
? `WHERE ${whereConditions.join(' AND ')}`
|
||||
: ''
|
||||
|
||||
const countResult = await queryAuthDb(
|
||||
`SELECT COUNT(*) AS total FROM audit_logs ${whereClause}`,
|
||||
sqlParams
|
||||
)
|
||||
|
||||
const total = parseInt(countResult.rows[0]?.total || '0', 10)
|
||||
const totalPages = Math.ceil(total / limit)
|
||||
|
||||
const dataSqlParams = [...sqlParams, limit, offset]
|
||||
const limitIndex = paramIndex
|
||||
const offsetIndex = paramIndex + 1
|
||||
|
||||
const dataResult = await queryAuthDb(
|
||||
`SELECT * FROM audit_logs
|
||||
${whereClause}
|
||||
ORDER BY created_at DESC
|
||||
LIMIT $${limitIndex} OFFSET $${offsetIndex}`,
|
||||
dataSqlParams
|
||||
)
|
||||
|
||||
return {
|
||||
logs: dataResult.rows,
|
||||
total,
|
||||
pagination: {
|
||||
total,
|
||||
page,
|
||||
limit,
|
||||
totalPages
|
||||
}
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('[AUDIT LOGS DB QUERY ERROR]:', error)
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
statusMessage: `Audit logs database query failed: ${error.message}`
|
||||
})
|
||||
}
|
||||
})
|
||||
Loading…
Reference in a new issue