lawnmowing/src/types/zone.ts

110 lines
2.0 KiB
TypeScript

export interface Zone {
id: number;
name: string;
imagePath?: string;
lastMowedDate?: string;
intervalDays?: number;
nextMowDate?: string;
scheduleType: 'interval' | 'specific';
area: number;
createdAt: string;
daysSinceLastMow?: number;
daysUntilNext?: number;
status: 'ok' | 'due' | 'overdue' | 'new';
isOverdue: boolean;
isDueToday: boolean;
isNew: boolean;
}
export interface ZoneFormData {
name: string;
intervalDays?: number;
lastMowedDate?: string;
nextMowDate?: string;
scheduleType: 'interval' | 'specific';
area: number;
image?: File;
}
export interface Mower {
id: number;
name: string;
type: string;
brand?: string;
model?: string;
isActive: boolean;
createdAt: string;
}
export interface MowerFormData {
name: string;
type: string;
brand?: string;
model?: string;
}
export interface MowingHistory {
id: number;
zoneId: number;
zoneName: string;
zoneArea: number;
mowerId?: number;
mowerName?: string;
mowerType?: string;
mowedDate: string;
notes?: string;
sessionId?: string;
duration?: number; // in minutes
weather?: string;
createdAt: string;
}
export interface MowingHistoryResponse {
data: MowingHistory[];
pagination: {
total: number;
currentPage: number;
totalPages: number;
hasNextPage: boolean;
hasPrevPage: boolean;
limit: number;
offset: number;
};
}
export interface MowingStats {
period: number;
totalSessions: number;
totalMinutes: number;
totalArea: number;
mostActiveZone: {
name: string;
sessions: number;
} | null;
mostUsedMower: {
name: string;
type: string;
sessions: number;
} | null;
dailyActivity: {
date: string;
sessions: number;
duration: number;
area: number;
}[];
}
export interface MowingFormData {
notes?: string;
duration?: number;
weather?: string;
mowerId?: number;
}
export interface BulkMowingFormData {
selectedZoneIds: number[];
notes?: string;
totalDuration?: number;
weather?: string;
mowerId?: number;
}