39948-vm/backend/src/db/api/access_logs.ts
2026-07-01 15:45:38 +02:00

95 lines
2.2 KiB
TypeScript

import GenericDBApi from './base.api.ts';
import db from '../models/index.ts';
import type {
AccessLogAssociationConfig,
AccessLogData,
AccessLogFieldMapping,
AccessLogRelationFilterConfig,
} from '../../types/index.ts';
class Access_logsDBApi extends GenericDBApi {
static override get MODEL(): unknown {
return db.access_logs;
}
static override get TABLE_NAME(): string {
return 'access_logs';
}
static override get SEARCHABLE_FIELDS(): string[] {
return ['path', 'ip_address', 'user_agent'];
}
static override get RANGE_FIELDS(): string[] {
return ['accessed_at'];
}
static override get ENUM_FIELDS(): string[] {
return ['environment'];
}
static override get CSV_FIELDS(): string[] {
return [
'id',
'environment',
'path',
'ip_address',
'user_agent',
'accessed_at',
'createdAt',
];
}
static override get AUTOCOMPLETE_FIELD(): string {
return 'path';
}
static override get ASSOCIATIONS(): AccessLogAssociationConfig[] {
return [
{ field: 'project', setter: 'setProject', isArray: false },
{ field: 'user', setter: 'setUser', isArray: false },
];
}
static override get FIND_BY_INCLUDES(): unknown[] {
return [{ association: 'project' }, { association: 'user' }];
}
static override get FIND_ALL_INCLUDES(): unknown[] {
return [
{ model: db.projects, as: 'project', required: false },
{ model: db.users, as: 'user', required: false },
];
}
static override get RELATION_FILTERS(): AccessLogRelationFilterConfig[] {
return [
{
filterKey: 'project',
model: db.projects,
as: 'project',
searchField: 'name',
},
{
filterKey: 'user',
model: db.users,
as: 'user',
searchField: 'firstName',
},
];
}
static override getFieldMapping(data: AccessLogData): AccessLogFieldMapping {
return {
id: data.id || undefined,
environment: data.environment || null,
path: data.path || null,
ip_address: data.ip_address || null,
user_agent: data.user_agent || null,
accessed_at: data.accessed_at || null,
};
}
}
export default Access_logsDBApi;