// src/server/features/reference_books/access.service.ts
// Business logic for external access management

import { externalAccess } from './db/external_access.table';
import { createExtendedBaseService } from '../../shared/db/base.service';
import { externalAccessSchema } from '@shared/contracts/access';
import { logger } from '../../shared/lib/logger';
import { z } from 'zod';

/**
 * Типы для создания и обновления внешних доступов
 */
export type AccessCreate = Omit<typeof externalAccess.$inferInsert, 'id' | 'createdAt' | 'updatedAt' | 'archivedAt'>;

export type AccessUpdate = Partial<AccessCreate>;

/**
 * Тип для вывода DTO
 */
export type ExternalAccessDTO = z.infer<typeof externalAccessSchema>;

/**
 * Сервис управления внешними доступами
 * Использует BaseServiceFactory для стандартного CRUD
 */
export const accessService = createExtendedBaseService<
  typeof externalAccess.$inferSelect,
  AccessCreate,
  AccessUpdate,
  ExternalAccessDTO
>(
  externalAccess,
  {
    outputSchema: externalAccessSchema,
    autoCamelCase: true,
  }
);
