Fix: Simplified join syntax (column-based) for better PostgREST compatibility (Phase 8 Governance)
Browse files
frontend/src/components/AuditView.tsx
CHANGED
|
@@ -55,9 +55,9 @@ const AuditView: React.FC = () => {
|
|
| 55 |
.from('audit_logs')
|
| 56 |
.select(`
|
| 57 |
*,
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
`)
|
| 62 |
.order('created_at', { ascending: false })
|
| 63 |
.range(page * pageSize, (page + 1) * pageSize - 1);
|
|
@@ -76,9 +76,9 @@ const AuditView: React.FC = () => {
|
|
| 76 |
const rows = logs.map(log => [
|
| 77 |
log.created_at,
|
| 78 |
log.action,
|
| 79 |
-
log.
|
| 80 |
-
log.
|
| 81 |
-
log.
|
| 82 |
JSON.stringify(log.metadata)
|
| 83 |
]);
|
| 84 |
|
|
@@ -93,8 +93,8 @@ const AuditView: React.FC = () => {
|
|
| 93 |
|
| 94 |
const filteredLogs = logs.filter(log =>
|
| 95 |
log.action.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
| 96 |
-
(log.
|
| 97 |
-
(log.
|
| 98 |
);
|
| 99 |
|
| 100 |
const formatTimestamp = (ts: string) => {
|
|
@@ -191,24 +191,24 @@ const AuditView: React.FC = () => {
|
|
| 191 |
<td style={{ padding: 'var(--space-md)', fontSize: '0.9rem' }}>
|
| 192 |
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
| 193 |
<User size={14} style={{ opacity: 0.5 }} />
|
| 194 |
-
{log.
|
| 195 |
</div>
|
| 196 |
</td>
|
| 197 |
<td style={{ padding: 'var(--space-md)', fontSize: '0.9rem' }}>
|
| 198 |
<div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>
|
| 199 |
-
{log.
|
| 200 |
<div style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--accent)', fontSize: '0.8rem' }}>
|
| 201 |
<Bot size={12} />
|
| 202 |
-
{log.
|
| 203 |
</div>
|
| 204 |
)}
|
| 205 |
-
{log.
|
| 206 |
<div style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--text-dim)', fontSize: '0.8rem' }}>
|
| 207 |
<FileText size={12} />
|
| 208 |
-
{log.
|
| 209 |
</div>
|
| 210 |
)}
|
| 211 |
-
{!log.
|
| 212 |
</div>
|
| 213 |
</td>
|
| 214 |
<td style={{ padding: 'var(--space-md)', textAlign: 'right' }}>
|
|
|
|
| 55 |
.from('audit_logs')
|
| 56 |
.select(`
|
| 57 |
*,
|
| 58 |
+
actor_id(full_name, email),
|
| 59 |
+
agent_id(name),
|
| 60 |
+
task_id(title)
|
| 61 |
`)
|
| 62 |
.order('created_at', { ascending: false })
|
| 63 |
.range(page * pageSize, (page + 1) * pageSize - 1);
|
|
|
|
| 76 |
const rows = logs.map(log => [
|
| 77 |
log.created_at,
|
| 78 |
log.action,
|
| 79 |
+
(log.actor_id as any)?.email || 'System',
|
| 80 |
+
(log.agent_id as any)?.name || 'N/A',
|
| 81 |
+
(log.task_id as any)?.title || 'N/A',
|
| 82 |
JSON.stringify(log.metadata)
|
| 83 |
]);
|
| 84 |
|
|
|
|
| 93 |
|
| 94 |
const filteredLogs = logs.filter(log =>
|
| 95 |
log.action.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
| 96 |
+
((log.actor_id as any)?.email || '').toLowerCase().includes(searchTerm.toLowerCase()) ||
|
| 97 |
+
((log.agent_id as any)?.name || '').toLowerCase().includes(searchTerm.toLowerCase())
|
| 98 |
);
|
| 99 |
|
| 100 |
const formatTimestamp = (ts: string) => {
|
|
|
|
| 191 |
<td style={{ padding: 'var(--space-md)', fontSize: '0.9rem' }}>
|
| 192 |
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
| 193 |
<User size={14} style={{ opacity: 0.5 }} />
|
| 194 |
+
{(log.actor_id as any)?.email || <span style={{ color: 'var(--text-dim)', fontSize: '0.8rem' }}>System</span>}
|
| 195 |
</div>
|
| 196 |
</td>
|
| 197 |
<td style={{ padding: 'var(--space-md)', fontSize: '0.9rem' }}>
|
| 198 |
<div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>
|
| 199 |
+
{log.agent_id && (
|
| 200 |
<div style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--accent)', fontSize: '0.8rem' }}>
|
| 201 |
<Bot size={12} />
|
| 202 |
+
{(log.agent_id as any).name}
|
| 203 |
</div>
|
| 204 |
)}
|
| 205 |
+
{log.task_id && (
|
| 206 |
<div style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--text-dim)', fontSize: '0.8rem' }}>
|
| 207 |
<FileText size={12} />
|
| 208 |
+
{(log.task_id as any).title}
|
| 209 |
</div>
|
| 210 |
)}
|
| 211 |
+
{!log.agent_id && !log.task_id && <span style={{ color: 'var(--text-dim)', fontSize: '0.8rem' }}>-</span>}
|
| 212 |
</div>
|
| 213 |
</td>
|
| 214 |
<td style={{ padding: 'var(--space-md)', textAlign: 'right' }}>
|
frontend/src/components/TeamsView.tsx
CHANGED
|
@@ -88,7 +88,7 @@ const TeamsView: React.FC = () => {
|
|
| 88 |
.from('team_members')
|
| 89 |
.select(`
|
| 90 |
*,
|
| 91 |
-
|
| 92 |
`)
|
| 93 |
.eq('team_id', teamId);
|
| 94 |
|
|
@@ -96,8 +96,8 @@ const TeamsView: React.FC = () => {
|
|
| 96 |
|
| 97 |
const formattedMembers = data.map(m => ({
|
| 98 |
...m,
|
| 99 |
-
full_name: m.
|
| 100 |
-
email: m.
|
| 101 |
}));
|
| 102 |
|
| 103 |
setMembers(formattedMembers);
|
|
|
|
| 88 |
.from('team_members')
|
| 89 |
.select(`
|
| 90 |
*,
|
| 91 |
+
user_id(full_name, email)
|
| 92 |
`)
|
| 93 |
.eq('team_id', teamId);
|
| 94 |
|
|
|
|
| 96 |
|
| 97 |
const formattedMembers = data.map(m => ({
|
| 98 |
...m,
|
| 99 |
+
full_name: (m.user_id as any)?.full_name,
|
| 100 |
+
email: (m.user_id as any)?.email
|
| 101 |
}));
|
| 102 |
|
| 103 |
setMembers(formattedMembers);
|