Initial Commit
This commit is contained in:
121
src/types/index.ts
Normal file
121
src/types/index.ts
Normal file
@@ -0,0 +1,121 @@
|
||||
// Core type definitions for the Beach Litter Mapping Platform
|
||||
|
||||
export type LitterType = 'plastic' | 'metal' | 'glass' | 'organic' | 'hazardous' | 'other';
|
||||
|
||||
export type QuantityLevel = 'minimal' | 'moderate' | 'significant' | 'severe';
|
||||
|
||||
export type LocationSource = 'exif' | 'gps' | 'manual';
|
||||
|
||||
export type VerificationStatus = 'pending' | 'verified' | 'disputed';
|
||||
|
||||
export type EventStatus = 'upcoming' | 'completed' | 'cancelled';
|
||||
|
||||
export interface Coordinates {
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
}
|
||||
|
||||
export interface User {
|
||||
id: string;
|
||||
clerkId: string;
|
||||
email: string;
|
||||
username: string;
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
avatarUrl?: string;
|
||||
impactScore: number;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface Report {
|
||||
id: string;
|
||||
userId: string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
locationSource: LocationSource;
|
||||
photoUrls: string[];
|
||||
photoTimestamp?: Date;
|
||||
litterType: LitterType;
|
||||
quantity: QuantityLevel;
|
||||
description?: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
submittedAt: Date;
|
||||
verificationStatus: VerificationStatus;
|
||||
}
|
||||
|
||||
export interface CleanupEvent {
|
||||
id: string;
|
||||
organizerId: string;
|
||||
title: string;
|
||||
description: string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
locationName: string;
|
||||
scheduledDate: Date;
|
||||
duration: number; // in minutes
|
||||
status: EventStatus;
|
||||
participantCount: number;
|
||||
litterCollected?: number; // in kilograms
|
||||
photos?: string[];
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface EnvironmentalConcern {
|
||||
id: string;
|
||||
reportId: string;
|
||||
concernType: string;
|
||||
severity: 'low' | 'medium' | 'high' | 'critical';
|
||||
description: string;
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
export interface Hotspot {
|
||||
id: string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
radius: number; // in meters
|
||||
reportCount: number;
|
||||
severityScore: number;
|
||||
lastReportDate: Date;
|
||||
calculatedAt: Date;
|
||||
}
|
||||
|
||||
// DTOs (Data Transfer Objects)
|
||||
export interface CreateReportDTO {
|
||||
photos: File[];
|
||||
latitude?: number;
|
||||
longitude?: number;
|
||||
locationSource: LocationSource;
|
||||
litterType: LitterType;
|
||||
quantity: QuantityLevel;
|
||||
description?: string;
|
||||
environmentalConcerns?: {
|
||||
type: string;
|
||||
severity: 'low' | 'medium' | 'high' | 'critical';
|
||||
description: string;
|
||||
}[];
|
||||
}
|
||||
|
||||
export interface ReportResponseDTO extends Report {
|
||||
user: {
|
||||
id: string;
|
||||
username: string;
|
||||
avatarUrl?: string;
|
||||
};
|
||||
verificationCount: number;
|
||||
disputeCount: number;
|
||||
environmentalConcerns: EnvironmentalConcern[];
|
||||
}
|
||||
|
||||
export interface FilterState {
|
||||
dateRange?: {
|
||||
start: Date;
|
||||
end: Date;
|
||||
};
|
||||
litterTypes?: LitterType[];
|
||||
quantities?: QuantityLevel[];
|
||||
verificationStatus?: VerificationStatus[];
|
||||
}
|
||||
Reference in New Issue
Block a user