search.ts•4.59 kB
/**
 * Verktyg för att söka och filtrera skolenheter
 */
import { z } from 'zod';
import { schoolUnitsApi } from '../../api/school-units-client.js';
// Zod-scheman för validering
export const searchSchoolUnitsSchema = {
  name: z.string().optional().describe('Sök efter skolenhet med namn (delmatchning)'),
  status: z.enum(['AKTIV', 'UPPHORT', 'VILANDE']).optional().describe('Filtrera på status (AKTIV, UPPHORT, VILANDE)'),
  limit: z.number().optional().default(50).describe('Maximalt antal resultat att returnera')
};
export const getSchoolUnitDetailsSchema = {
  code: z.string().describe('Skolenhetskod (t.ex. "29824923")')
};
export const getSchoolUnitsByStatusSchema = {
  status: z.enum(['AKTIV', 'UPPHORT', 'VILANDE']).describe('Status att filtrera på'),
  limit: z.number().optional().default(50).describe('Maximalt antal resultat att returnera')
};
export const searchSchoolUnitsByNameSchema = {
  name: z.string().describe('Namn eller del av namn att söka efter'),
  limit: z.number().optional().default(50).describe('Maximalt antal resultat att returnera')
};
// Verktygsimplementationer
export async function searchSchoolUnits(params: {
  name?: string;
  status?: 'AKTIV' | 'UPPHORT' | 'VILANDE';
  limit?: number;
}) {
  try {
    const units = await schoolUnitsApi.searchSchoolUnits({
      name: params.name,
      status: params.status
    });
    // Begränsa antal resultat
    const limitedUnits = params.limit ? units.slice(0, params.limit) : units.slice(0, 50);
    return {
      content: [
        {
          type: 'text' as const,
          text: JSON.stringify({
            totalFound: units.length,
            showing: limitedUnits.length,
            schoolUnits: limitedUnits
          }, null, 2)
        }
      ]
    };
  } catch (error) {
    return {
      content: [
        {
          type: 'text' as const,
          text: `Fel vid sökning av skolenheter: ${error instanceof Error ? error.message : String(error)}`
        }
      ],
      isError: true
    };
  }
}
export async function getSchoolUnitDetails(params: {
  code: string;
}) {
  try {
    const unit = await schoolUnitsApi.getSchoolUnit(params.code);
    if (!unit) {
      return {
        content: [
          {
            type: 'text' as const,
            text: `Ingen skolenhet hittades med kod: ${params.code}`
          }
        ],
        isError: true
      };
    }
    return {
      content: [
        {
          type: 'text' as const,
          text: JSON.stringify(unit, null, 2)
        }
      ]
    };
  } catch (error) {
    return {
      content: [
        {
          type: 'text' as const,
          text: `Fel vid hämtning av skolenhet: ${error instanceof Error ? error.message : String(error)}`
        }
      ],
      isError: true
    };
  }
}
export async function getSchoolUnitsByStatus(params: {
  status: 'AKTIV' | 'UPPHORT' | 'VILANDE';
  limit?: number;
}) {
  try {
    const units = await schoolUnitsApi.getSchoolUnitsByStatus(params.status);
    // Begränsa antal resultat
    const limitedUnits = params.limit ? units.slice(0, params.limit) : units.slice(0, 50);
    return {
      content: [
        {
          type: 'text' as const,
          text: JSON.stringify({
            status: params.status,
            totalFound: units.length,
            showing: limitedUnits.length,
            schoolUnits: limitedUnits
          }, null, 2)
        }
      ]
    };
  } catch (error) {
    return {
      content: [
        {
          type: 'text' as const,
          text: `Fel vid hämtning av skolenheter efter status: ${error instanceof Error ? error.message : String(error)}`
        }
      ],
      isError: true
    };
  }
}
export async function searchSchoolUnitsByName(params: {
  name: string;
  limit?: number;
}) {
  try {
    const units = await schoolUnitsApi.searchSchoolUnitsByName(params.name);
    // Begränsa antal resultat
    const limitedUnits = params.limit ? units.slice(0, params.limit) : units.slice(0, 50);
    return {
      content: [
        {
          type: 'text' as const,
          text: JSON.stringify({
            searchTerm: params.name,
            totalFound: units.length,
            showing: limitedUnits.length,
            schoolUnits: limitedUnits
          }, null, 2)
        }
      ]
    };
  } catch (error) {
    return {
      content: [
        {
          type: 'text' as const,
          text: `Fel vid sökning av skolenheter efter namn: ${error instanceof Error ? error.message : String(error)}`
        }
      ],
      isError: true
    };
  }
}