mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-01-16 08:32:09 +01:00
feat: comprehensive Biome linting fixes and code quality improvements
Major code quality overhaul addressing 58% of all linting issues: • Type Safety Improvements: - Replace all any types with proper TypeScript interfaces - Fix Map component shadowing (renamed to CountryMap) - Add comprehensive custom error classes system - Enhance API route type safety • Accessibility Enhancements: - Add explicit button types to all interactive elements - Implement useId() hooks for form element accessibility - Add SVG title attributes for screen readers - Fix static element interactions with keyboard handlers • React Best Practices: - Resolve exhaustive dependencies warnings with useCallback - Extract nested component definitions to top level - Fix array index keys with proper unique identifiers - Improve component organization and prop typing • Code Organization: - Automatic import organization and type import optimization - Fix unused function parameters and variables - Enhanced error handling with structured error responses - Improve component reusability and maintainability Results: 248 → 104 total issues (58% reduction) - Fixed all critical type safety and security issues - Enhanced accessibility compliance significantly - Improved code maintainability and performance
This commit is contained in:
@ -1,17 +1,16 @@
|
||||
// SessionImport to Session processor
|
||||
import {
|
||||
PrismaClient,
|
||||
SentimentCategory,
|
||||
SessionCategory,
|
||||
ProcessingStage,
|
||||
SentimentCategory,
|
||||
} from "@prisma/client";
|
||||
import cron from "node-cron";
|
||||
import { getSchedulerConfig } from "./env";
|
||||
import { ProcessingStatusManager } from "./processingStatusManager";
|
||||
import {
|
||||
fetchTranscriptContent,
|
||||
isValidTranscriptUrl,
|
||||
} from "./transcriptFetcher";
|
||||
import { ProcessingStatusManager } from "./processingStatusManager";
|
||||
import cron from "node-cron";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
@ -44,7 +43,7 @@ function parseEuropeanDate(dateStr: string): Date {
|
||||
const isoDateStr = `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")} ${timePart}`;
|
||||
const date = new Date(isoDateStr);
|
||||
|
||||
if (isNaN(date.getTime())) {
|
||||
if (Number.isNaN(date.getTime())) {
|
||||
throw new Error(`Failed to parse date: ${dateStr} -> ${isoDateStr}`);
|
||||
}
|
||||
|
||||
@ -54,7 +53,7 @@ function parseEuropeanDate(dateStr: string): Date {
|
||||
/**
|
||||
* Helper function to parse sentiment from raw string (fallback only)
|
||||
*/
|
||||
function parseFallbackSentiment(
|
||||
function _parseFallbackSentiment(
|
||||
sentimentRaw: string | null
|
||||
): SentimentCategory | null {
|
||||
if (!sentimentRaw) return null;
|
||||
@ -72,7 +71,7 @@ function parseFallbackSentiment(
|
||||
/**
|
||||
* Helper function to parse boolean from raw string (fallback only)
|
||||
*/
|
||||
function parseFallbackBoolean(rawValue: string | null): boolean | null {
|
||||
function _parseFallbackBoolean(rawValue: string | null): boolean | null {
|
||||
if (!rawValue) return null;
|
||||
return ["true", "1", "yes", "escalated", "forwarded"].includes(
|
||||
rawValue.toLowerCase()
|
||||
@ -113,7 +112,7 @@ async function parseTranscriptIntoMessages(
|
||||
try {
|
||||
timestamp = parseEuropeanDate(timestampMatch[1]);
|
||||
content = timestampMatch[2];
|
||||
} catch (error) {
|
||||
} catch (_error) {
|
||||
// If timestamp parsing fails, treat the whole line as content
|
||||
content = trimmedLine;
|
||||
}
|
||||
@ -367,8 +366,8 @@ export async function processQueuedImports(
|
||||
where: {
|
||||
session: null, // No session created yet
|
||||
company: {
|
||||
status: "ACTIVE" // Only process imports from active companies
|
||||
}
|
||||
status: "ACTIVE", // Only process imports from active companies
|
||||
},
|
||||
},
|
||||
take: batchSize,
|
||||
orderBy: {
|
||||
@ -403,7 +402,7 @@ export async function processQueuedImports(
|
||||
// Process with concurrency limit to avoid overwhelming the database
|
||||
const concurrencyLimit = 5;
|
||||
const results = [];
|
||||
|
||||
|
||||
for (let i = 0; i < batchPromises.length; i += concurrencyLimit) {
|
||||
const chunk = batchPromises.slice(i, i + concurrencyLimit);
|
||||
const chunkResults = await Promise.all(chunk);
|
||||
|
||||
Reference in New Issue
Block a user