diff --git a/src/lib/server/pcd/queries/delayProfiles/create.ts b/src/lib/server/pcd/queries/delayProfiles/create.ts index ca0e420..798209e 100644 --- a/src/lib/server/pcd/queries/delayProfiles/create.ts +++ b/src/lib/server/pcd/queries/delayProfiles/create.ts @@ -4,9 +4,9 @@ import type { PCDCache } from '../../cache.ts'; import { writeOperation, type OperationLayer } from '../../writer.ts'; -import type { PreferredProtocol } from './types.ts'; +import type { PreferredProtocol } from '$shared/pcd/display.ts'; -export interface CreateDelayProfileInput { +interface CreateDelayProfileInput { name: string; preferredProtocol: PreferredProtocol; usenetDelay: number; @@ -16,7 +16,7 @@ export interface CreateDelayProfileInput { minimumCfScore: number; } -export interface CreateDelayProfileOptions { +interface CreateDelayProfileOptions { databaseId: number; cache: PCDCache; layer: OperationLayer; diff --git a/src/lib/server/pcd/queries/delayProfiles/delete.ts b/src/lib/server/pcd/queries/delayProfiles/delete.ts index 37abbfa..c7e90f7 100644 --- a/src/lib/server/pcd/queries/delayProfiles/delete.ts +++ b/src/lib/server/pcd/queries/delayProfiles/delete.ts @@ -4,14 +4,14 @@ import type { PCDCache } from '../../cache.ts'; import { writeOperation, type OperationLayer } from '../../writer.ts'; -import type { DelayProfileTableRow } from './types.ts'; +import type { DelayProfilesRow } from '$shared/pcd/display.ts'; -export interface DeleteDelayProfileOptions { +interface DeleteDelayProfileOptions { databaseId: number; cache: PCDCache; layer: OperationLayer; /** The current profile data (for value guards) */ - current: DelayProfileTableRow; + current: DelayProfilesRow; } /** diff --git a/src/lib/server/pcd/queries/delayProfiles/get.ts b/src/lib/server/pcd/queries/delayProfiles/get.ts deleted file mode 100644 index 1a2fbb5..0000000 --- a/src/lib/server/pcd/queries/delayProfiles/get.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Get a single delay profile by ID - */ - -import type { PCDCache } from '../../cache.ts'; -import type { DelayProfileTableRow, PreferredProtocol } from './types.ts'; - -/** - * Get a single delay profile by ID with all data - */ -export async function get(cache: PCDCache, id: number): Promise { - const db = cache.kb; - - const profile = await db - .selectFrom('delay_profiles') - .select([ - 'id', - 'name', - 'preferred_protocol', - 'usenet_delay', - 'torrent_delay', - 'bypass_if_highest_quality', - 'bypass_if_above_custom_format_score', - 'minimum_custom_format_score', - 'created_at', - 'updated_at' - ]) - .where('id', '=', id) - .executeTakeFirst(); - - if (!profile) return null; - - return { - id: profile.id, - name: profile.name, - preferred_protocol: profile.preferred_protocol as PreferredProtocol, - usenet_delay: profile.usenet_delay, - torrent_delay: profile.torrent_delay, - bypass_if_highest_quality: profile.bypass_if_highest_quality === 1, - bypass_if_above_custom_format_score: profile.bypass_if_above_custom_format_score === 1, - minimum_custom_format_score: profile.minimum_custom_format_score, - created_at: profile.created_at, - updated_at: profile.updated_at - }; -} diff --git a/src/lib/server/pcd/queries/delayProfiles/index.ts b/src/lib/server/pcd/queries/delayProfiles/index.ts index fc04490..6bcbf80 100644 --- a/src/lib/server/pcd/queries/delayProfiles/index.ts +++ b/src/lib/server/pcd/queries/delayProfiles/index.ts @@ -1,17 +1,15 @@ /** - * Delay Profile queries and mutations + * Delay Profile CRUD operations */ -// Export all types -export type { DelayProfileTableRow, PreferredProtocol } from './types.ts'; -export type { CreateDelayProfileInput } from './create.ts'; -export type { UpdateDelayProfileInput } from './update.ts'; +// Read +export { list, get } from './read.ts'; -// Export query functions -export { list } from './list.ts'; -export { get } from './get.ts'; - -// Export mutation functions +// Create export { create } from './create.ts'; + +// Update export { update } from './update.ts'; + +// Delete export { remove } from './delete.ts'; diff --git a/src/lib/server/pcd/queries/delayProfiles/list.ts b/src/lib/server/pcd/queries/delayProfiles/list.ts deleted file mode 100644 index 18d9336..0000000 --- a/src/lib/server/pcd/queries/delayProfiles/list.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Delay profile list queries - */ - -import type { PCDCache } from '../../cache.ts'; -import type { DelayProfileTableRow, PreferredProtocol } from './types.ts'; - -/** - * Get delay profiles with full data for table/card views - */ -export async function list(cache: PCDCache): Promise { - const db = cache.kb; - - const profiles = await db - .selectFrom('delay_profiles') - .select([ - 'id', - 'name', - 'preferred_protocol', - 'usenet_delay', - 'torrent_delay', - 'bypass_if_highest_quality', - 'bypass_if_above_custom_format_score', - 'minimum_custom_format_score', - 'created_at', - 'updated_at' - ]) - .orderBy('name') - .execute(); - - return profiles.map((profile) => ({ - id: profile.id, - name: profile.name, - preferred_protocol: profile.preferred_protocol as PreferredProtocol, - usenet_delay: profile.usenet_delay, - torrent_delay: profile.torrent_delay, - bypass_if_highest_quality: profile.bypass_if_highest_quality === 1, - bypass_if_above_custom_format_score: profile.bypass_if_above_custom_format_score === 1, - minimum_custom_format_score: profile.minimum_custom_format_score, - created_at: profile.created_at, - updated_at: profile.updated_at - })); -} diff --git a/src/lib/server/pcd/queries/delayProfiles/mutations.ts b/src/lib/server/pcd/queries/delayProfiles/mutations.ts deleted file mode 100644 index 76307dd..0000000 --- a/src/lib/server/pcd/queries/delayProfiles/mutations.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Delay Profile mutations - re-exports for cleaner imports - */ - -export { create, type CreateDelayProfileInput, type CreateDelayProfileOptions } from './create.ts'; -export { update, type UpdateDelayProfileInput, type UpdateDelayProfileOptions } from './update.ts'; -export { remove, type DeleteDelayProfileOptions } from './delete.ts'; diff --git a/src/lib/server/pcd/queries/delayProfiles/read.ts b/src/lib/server/pcd/queries/delayProfiles/read.ts new file mode 100644 index 0000000..9f0b0f6 --- /dev/null +++ b/src/lib/server/pcd/queries/delayProfiles/read.ts @@ -0,0 +1,94 @@ +/** + * Delay profile read operations + */ + +/** + * Delay profile read operations + */ + +import type { PCDCache } from '../../cache.ts'; +import type { DelayProfilesRow, PreferredProtocol } from '$shared/pcd/display.ts'; + +/** + * Convert a database row to DelayProfilesRow with boolean conversion. + * SQLite returns 0/1 for booleans, we convert to true/false. + */ +function toDelayProfile(row: { + id: number; + name: string; + preferred_protocol: string; + usenet_delay: number | null; + torrent_delay: number | null; + bypass_if_highest_quality: number; + bypass_if_above_custom_format_score: number; + minimum_custom_format_score: number | null; + created_at: string; + updated_at: string; +}): DelayProfilesRow { + return { + id: row.id, + name: row.name, + preferred_protocol: row.preferred_protocol as PreferredProtocol, + usenet_delay: row.usenet_delay, + torrent_delay: row.torrent_delay, + bypass_if_highest_quality: row.bypass_if_highest_quality === 1, + bypass_if_above_custom_format_score: row.bypass_if_above_custom_format_score === 1, + minimum_custom_format_score: row.minimum_custom_format_score, + created_at: row.created_at, + updated_at: row.updated_at + }; +} + +/** + * Get all delay profiles ordered by name + */ +export async function list(cache: PCDCache): Promise { + const db = cache.kb; + + const profiles = await db + .selectFrom('delay_profiles') + .select([ + 'id', + 'name', + 'preferred_protocol', + 'usenet_delay', + 'torrent_delay', + 'bypass_if_highest_quality', + 'bypass_if_above_custom_format_score', + 'minimum_custom_format_score', + 'created_at', + 'updated_at' + ]) + .orderBy('name') + .execute(); + + return profiles.map(toDelayProfile); +} + +/** + * Get a single delay profile by ID + */ +export async function get(cache: PCDCache, id: number): Promise { + const db = cache.kb; + + const profile = await db + .selectFrom('delay_profiles') + .select([ + 'id', + 'name', + 'preferred_protocol', + 'usenet_delay', + 'torrent_delay', + 'bypass_if_highest_quality', + 'bypass_if_above_custom_format_score', + 'minimum_custom_format_score', + 'created_at', + 'updated_at' + ]) + .where('id', '=', id) + .executeTakeFirst(); + + if (!profile) return null; + + return toDelayProfile(profile); +} diff --git a/src/lib/server/pcd/queries/delayProfiles/types.ts b/src/lib/server/pcd/queries/delayProfiles/types.ts deleted file mode 100644 index 26d5dd0..0000000 --- a/src/lib/server/pcd/queries/delayProfiles/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Delay Profile query-specific types - */ - -/** Preferred protocol options */ -export type PreferredProtocol = 'prefer_usenet' | 'prefer_torrent' | 'only_usenet' | 'only_torrent'; - -/** Delay profile data for table/card views */ -export interface DelayProfileTableRow { - id: number; - name: string; - preferred_protocol: PreferredProtocol; - usenet_delay: number | null; - torrent_delay: number | null; - bypass_if_highest_quality: boolean; - bypass_if_above_custom_format_score: boolean; - minimum_custom_format_score: number | null; - created_at: string; - updated_at: string; -} diff --git a/src/lib/server/pcd/queries/delayProfiles/update.ts b/src/lib/server/pcd/queries/delayProfiles/update.ts index 684352e..8d455fb 100644 --- a/src/lib/server/pcd/queries/delayProfiles/update.ts +++ b/src/lib/server/pcd/queries/delayProfiles/update.ts @@ -4,10 +4,10 @@ import type { PCDCache } from '../../cache.ts'; import { writeOperation, type OperationLayer } from '../../writer.ts'; -import type { PreferredProtocol, DelayProfileTableRow } from './types.ts'; +import type { DelayProfilesRow, PreferredProtocol } from '$shared/pcd/display.ts'; import { logger } from '$logger/logger.ts'; -export interface UpdateDelayProfileInput { +interface UpdateDelayProfileInput { name: string; preferredProtocol: PreferredProtocol; usenetDelay: number; @@ -17,12 +17,12 @@ export interface UpdateDelayProfileInput { minimumCfScore: number; } -export interface UpdateDelayProfileOptions { +interface UpdateDelayProfileOptions { databaseId: number; cache: PCDCache; layer: OperationLayer; /** The current profile data (for value guards) */ - current: DelayProfileTableRow; + current: DelayProfilesRow; /** The new values */ input: UpdateDelayProfileInput; } diff --git a/src/lib/server/sync/delayProfiles/syncer.ts b/src/lib/server/sync/delayProfiles/syncer.ts index 8648023..39c9dd2 100644 --- a/src/lib/server/sync/delayProfiles/syncer.ts +++ b/src/lib/server/sync/delayProfiles/syncer.ts @@ -8,8 +8,8 @@ import { BaseSyncer, type SyncResult } from '../base.ts'; import { arrSyncQueries } from '$db/queries/arrSync.ts'; import { getCache } from '$pcd/cache.ts'; -import { get as getDelayProfile } from '$pcd/queries/delayProfiles/get.ts'; -import type { DelayProfileTableRow } from '$pcd/queries/delayProfiles/types.ts'; +import { get as getDelayProfile } from '$pcd/queries/delayProfiles/index.ts'; +import type { DelayProfilesRow } from '$shared/pcd/display.ts'; import type { ArrDelayProfile } from '$arr/types.ts'; import { logger } from '$logger/logger.ts'; @@ -66,7 +66,7 @@ export class DelayProfileSyncer extends BaseSyncer { return { success: true, itemsSynced: 1 }; } - private transform(profile: DelayProfileTableRow): ArrDelayProfile { + private transform(profile: DelayProfilesRow): ArrDelayProfile { let enableUsenet = true; let enableTorrent = true; let preferredProtocol = 'usenet'; diff --git a/src/lib/shared/pcd/display.ts b/src/lib/shared/pcd/display.ts index 5636b07..46261a9 100644 --- a/src/lib/shared/pcd/display.ts +++ b/src/lib/shared/pcd/display.ts @@ -1,11 +1,12 @@ /** * PCD Display Types * - * Types for query results that include JOINed data. - * These extend the generated Row types with related entities. + * Types for query results that include JOINed data or need semantic naming. + * Simple aliases to generated Row types are provided for cleaner API. */ import type { RegularExpressionsRow } from './types.ts'; +import type { DelayProfilesRow } from './types.ts'; // ============================================================================ // COMMON @@ -25,3 +26,14 @@ export interface Tag { export type RegularExpressionWithTags = RegularExpressionsRow & { tags: Tag[]; }; + +// ============================================================================ +// DELAY PROFILES +// ============================================================================ +// No JOINs needed - the generated Row type is already semantic (booleans, unions). +// Re-exported here for consistent import pattern across all entities. + +export type { DelayProfilesRow } from './types.ts'; + +/** Preferred protocol options - extracted for use in mutations */ +export type PreferredProtocol = DelayProfilesRow['preferred_protocol']; diff --git a/src/routes/arr/[id]/sync/components/DelayProfiles.svelte b/src/routes/arr/[id]/sync/components/DelayProfiles.svelte index 4dce252..619e11d 100644 --- a/src/routes/arr/[id]/sync/components/DelayProfiles.svelte +++ b/src/routes/arr/[id]/sync/components/DelayProfiles.svelte @@ -1,5 +1,5 @@