mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-04-03 23:36:17 +02:00
Add distance scale bar and user-placed location pins to the offline maps viewer. - Scale bar (bottom-left) shows distance reference that updates with zoom level - Click anywhere on map to place a named pin with color selection (6 colors) - Collapsible "Saved Locations" panel lists all pins with fly-to navigation - Full dark mode support for popups and panel via CSS overrides - New `map_markers` table with future-proofed columns for routing (marker_type, route_id, route_order, notes) to avoid a migration when routes are added later - CRUD endpoints: GET/POST /api/maps/markers, PATCH/DELETE /api/maps/markers/:id - VineJS validation on create/update - MapMarker Lucid model Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
44 lines
969 B
TypeScript
44 lines
969 B
TypeScript
import { DateTime } from 'luxon'
|
|
import { BaseModel, column, SnakeCaseNamingStrategy } from '@adonisjs/lucid/orm'
|
|
|
|
export default class MapMarker extends BaseModel {
|
|
static namingStrategy = new SnakeCaseNamingStrategy()
|
|
|
|
@column({ isPrimary: true })
|
|
declare id: number
|
|
|
|
@column()
|
|
declare name: string
|
|
|
|
@column()
|
|
declare longitude: number
|
|
|
|
@column()
|
|
declare latitude: number
|
|
|
|
@column()
|
|
declare color: string
|
|
|
|
// 'pin' for user-placed markers, 'waypoint' for route points (future)
|
|
@column()
|
|
declare marker_type: string
|
|
|
|
// Groups markers into a route (future)
|
|
@column()
|
|
declare route_id: string | null
|
|
|
|
// Order within a route (future)
|
|
@column()
|
|
declare route_order: number | null
|
|
|
|
// Optional user notes for a location
|
|
@column()
|
|
declare notes: string | null
|
|
|
|
@column.dateTime({ autoCreate: true })
|
|
declare created_at: DateTime
|
|
|
|
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
declare updated_at: DateTime
|
|
}
|