Skip to main content

Services API Reference

This document provides API documentation for the core services in the Kuviq application.

Overview

Services are static classes that encapsulate business logic and Firebase interactions. They follow a consistent pattern:

  • Static methods for all operations
  • Automatic organization scoping
  • Firestore document preparation with metadata
  • Consistent error handling

Core Services

ItemService

Manages items (equipment) in the system.

import { ItemService } from '@/services/ItemService'

Methods

MethodDescriptionReturns
getAllItems()Get all items (admin only)Promise<Item[]>
getItemsByOrganization(orgId)Get items for an organizationPromise<Item[]>
getItem(itemId)Get a single item by IDPromise<Item | null>
createItem(item, userId)Create a new itemPromise<Item>
updateItem(itemId, updates, userId)Update an itemPromise<void>
deleteItem(itemId)Soft delete an itemPromise<void>
transferItemToOrganization(itemId, targetOrgId)Transfer item to another orgPromise<void>

Example

// Get items for current organization
const items = await ItemService.getItemsByOrganization(organizationId)

// Create a new item
const newItem = await ItemService.createItem({
name: 'Fire Extinguisher',
itemTypeId: 'type123',
locationId: 'loc456',
status: ItemStatus.ACTIVE,
organizationId: organizationId,
}, userId)

SubscriptionService

Manages organization subscriptions and feature limits.

import { SubscriptionService } from '@/services/SubscriptionService'

Methods

MethodDescriptionReturns
getSubscription(orgId)Get subscription detailsPromise<Subscription | null>
getCurrentUsage(orgId)Get current usage metricsPromise<UsageMetrics | null>
checkUsageLimit(orgId, metric, value)Check if within limitsPromise<LimitCheck>
updateUsage(orgId, usage, userId)Update usage metricsPromise<void>
getFeatures(orgId)Get enabled featuresPromise<Features>
checkFeatureAccess(orgId, feature)Check feature availabilityPromise<boolean>

Example

// Check if user can create more items
const { withinLimit, limit, current } = await SubscriptionService.checkUsageLimit(
organizationId,
'items',
currentItemCount + 1
)

if (!withinLimit) {
throw new Error(`Item limit reached (${current}/${limit})`)
}

UsageService

Tracks and manages usage metrics for organizations.

import { UsageService } from '@/services/UsageService'

Methods

MethodDescriptionReturns
incrementUsage(orgId, metric, amount, userId)Increment a metricPromise<void>
decrementUsage(orgId, metric, amount, userId)Decrement a metricPromise<void>
setUsage(orgId, metric, value, userId)Set a metric valuePromise<void>
getCurrentUsage(orgId)Get current usagePromise<UsageMetrics | null>
getUsageHistory(orgId, metric?, days?)Get usage historyPromise<UsageRecord[]>
checkUsageLimit(orgId, metric, increment?)Check limit with proposed changePromise<LimitCheckResult>
resetUsage(orgId, userId)Reset all usage (admin)Promise<void>

Metrics

  • users - Active user count
  • items - Total items
  • inspections - Completed inspections
  • locations - Active locations
  • templates - Inspection templates
  • storage - Storage used (bytes)

SecurityService

Handles security operations including rate limiting and audit logging.

import { SecurityService } from '@/services/SecurityService'

Methods

MethodDescriptionReturns
checkRateLimit(userId, action)Check rate limit for actionPromise<boolean>
logSecurityEvent(event)Log a security eventPromise<void>
getSecurityEvents(orgId, filters?)Get security eventsPromise<SecurityEvent[]>
validateSession(sessionId)Validate a sessionPromise<boolean>

NotificationService

Manages in-app notifications.

import { NotificationService } from '@/services/NotificationService'

Methods

MethodDescriptionReturns
createNotification(notification)Create a notificationPromise<Notification>
getUserNotifications(userId, orgId)Get user notificationsPromise<Notification[]>
markAsRead(notificationId)Mark notification readPromise<void>
markAllAsRead(userId, orgId)Mark all as readPromise<void>
deleteNotification(notificationId)Delete a notificationPromise<void>

AnalyticsService

Provides analytics and reporting data.

import { AnalyticsService } from '@/services/AnalyticsService'

Methods

MethodDescriptionReturns
getInspectionStats(orgId, dateRange)Get inspection statisticsPromise<InspectionStats>
getItemStats(orgId)Get item statisticsPromise<ItemStats>
getComplianceRate(orgId, dateRange)Get compliance ratePromise<number>
getTrendData(orgId, metric, days)Get trend dataPromise<TrendData[]>

ReportService

Generates and manages reports.

import { ReportService } from '@/services/reportService'

Methods

MethodDescriptionReturns
generateReport(config)Generate a reportPromise<Report>
getReports(orgId)Get saved reportsPromise<Report[]>
getReport(reportId)Get a single reportPromise<Report | null>
deleteReport(reportId)Delete a reportPromise<void>
exportReport(reportId, format)Export report (PDF/Excel)Promise<Blob>

Import/Export Services

UnifiedImportExportService

Unified service for bulk import/export operations.

import { UnifiedImportExportService } from '@/services/UnifiedImportExportService'

Methods

MethodDescriptionReturns
importData(entityType, data, options)Import data from filePromise<ImportResult>
exportData(entityType, filters, format)Export data to filePromise<Blob>
validateImportData(entityType, data)Validate before importPromise<ValidationResult>
getImportTemplate(entityType, format)Get import templatePromise<Blob>

Supported Entity Types

  • items - Items/equipment
  • locations - Locations
  • users - Users
  • itemTypes - Item types
  • manufacturers - Manufacturers

Supported Formats

  • xlsx - Excel (ExcelJS)
  • csv - CSV
  • json - JSON

ExportService

Lower-level export functionality.

import { ExportService } from '@/services/ExportService'

Methods

MethodDescriptionReturns
exportToExcel(data, columns, filename)Export to ExcelPromise<void>
exportToCsv(data, columns, filename)Export to CSVPromise<void>
exportToPdf(data, config)Export to PDFPromise<void>

QR Code Services

QRCodeService

Generates and manages QR codes.

import { QRCodeService } from '@/services/QRCodeService'

Methods

MethodDescriptionReturns
generateQRCode(itemId, options?)Generate QR codePromise<string>
generateBulkQRCodes(itemIds, options?)Generate multiple QR codesPromise<QRCodeData[]>
parseQRCode(data)Parse QR code dataQRCodeInfo

QRCodePdfService

Generates printable QR code PDFs.

import { QRCodePdfService } from '@/services/QRCodePdfService'

Methods

MethodDescriptionReturns
generatePdf(items, options)Generate QR code PDFPromise<Blob>
generateLabels(items, labelConfig)Generate label sheetPromise<Blob>

Scheduling Services

AutoSchedulingService

Automatically schedules inspections based on rules.

import { AutoSchedulingService } from '@/services/AutoSchedulingService'

Methods

MethodDescriptionReturns
scheduleInspections(orgId, scheduleConfig)Schedule inspectionsPromise<Inspection[]>
updateSchedule(scheduleId, updates)Update schedulePromise<void>
cancelSchedule(scheduleId)Cancel a schedulePromise<void>
getUpcomingInspections(orgId, days?)Get upcoming inspectionsPromise<Inspection[]>

ScheduleUpdateService

Handles schedule updates and recalculations.

import { ScheduleUpdateService } from '@/services/ScheduleUpdateService'

Methods

MethodDescriptionReturns
recalculateSchedules(orgId)Recalculate all schedulesPromise<void>
updateNextInspectionDate(itemId)Update item's next datePromise<void>

Trial & Onboarding Services

TrialService

Manages trial subscriptions.

import { TrialService } from '@/services/TrialService'

Methods

MethodDescriptionReturns
startTrial(orgId, plan)Start a trialPromise<Trial>
getTrialStatus(orgId)Get trial statusPromise<TrialStatus>
extendTrial(orgId, days)Extend trialPromise<void>
endTrial(orgId)End trial earlyPromise<void>

OnboardingService

Manages user onboarding flow.

import { OnboardingService } from '@/services/OnboardingService'

Methods

MethodDescriptionReturns
getOnboardingStatus(userId)Get onboarding statusPromise<OnboardingStatus>
completeStep(userId, step)Complete a stepPromise<void>
skipOnboarding(userId)Skip onboardingPromise<void>
generateDemoData(orgId)Generate demo dataPromise<void>

Monitoring Service

monitoringService

Application monitoring and error tracking.

import { monitoringService } from '@/services/monitoringService'

Methods

MethodDescriptionReturns
trackError(error, context?)Track an errorvoid
trackMetric(name, value, tags?)Track a metricvoid
trackEvent(name, properties?)Track an eventvoid
startSpan(name)Start a performance spanSpan
endSpan(span)End a performance spanvoid

Example

// Track an error
monitoringService.trackError(error, {
component: 'InspectionForm',
action: 'submit',
userId: currentUser.id,
})

// Track a metric
monitoringService.trackMetric('inspection_duration', durationMs, {
templateId: template.id,
})

Error Handling

All services use consistent error handling:

try {
await SomeService.someMethod()
} catch (error) {
// Errors are logged to console with context
// Original error is wrapped in a descriptive Error
throw new Error('Failed to perform operation')
}

Type Imports

Service types are available from the types directory:

import type { Item, Inspection, Location } from '@/types/models'
import type { Subscription, UsageMetrics } from '@/types/subscription'
import type { Report, ReportConfig } from '@/types/report'