@@ -6,7 +6,11 @@ import { DEFAULT_MISSION_CONFIG } from "@droneroute/shared";
66import { generateKmzBuffer } from "../services/kmzGenerator.js" ;
77import { parseKmz } from "../services/kmzParser.js" ;
88import { getDb } from "../models/db.js" ;
9- import { optionalAuth , type AuthRequest } from "../middleware/auth.js" ;
9+ import {
10+ authMiddleware ,
11+ optionalAuth ,
12+ type AuthRequest ,
13+ } from "../middleware/auth.js" ;
1014
1115export const kmzRoutes = Router ( ) ;
1216
@@ -16,7 +20,7 @@ const upload = multer({
1620} ) ;
1721
1822// Generate and download KMZ from mission data (POST body)
19- kmzRoutes . post ( "/generate" , async ( req , res ) => {
23+ kmzRoutes . post ( "/generate" , authMiddleware , async ( req : AuthRequest , res ) => {
2024 try {
2125 const { name, config, waypoints, pois } = req . body ;
2226 if ( ! config || ! waypoints || waypoints . length < 2 ) {
@@ -44,45 +48,52 @@ kmzRoutes.post("/generate", async (req, res) => {
4448 res . setHeader ( "Content-Disposition" , `attachment; filename="${ filename } "` ) ;
4549 res . send ( buffer ) ;
4650 } catch ( err : any ) {
47- console . error ( "KMZ generation error:" , err ) ;
48- res . status ( 500 ) . json ( { error : err . message || "Failed to generate KMZ" } ) ;
51+ console . error ( "KMZ download error:" , err ) ;
52+ res . status ( 500 ) . json ( { error : "Failed to generate KMZ" } ) ;
4953 }
5054} ) ;
5155
5256// Download KMZ for a saved mission
53- kmzRoutes . get ( "/download/:missionId" , async ( req , res ) => {
54- try {
55- const db = getDb ( ) ;
56- const row = db
57- . prepare ( "SELECT * FROM missions WHERE id = ?" )
58- . get ( req . params . missionId ) as any ;
59- if ( ! row ) {
60- res . status ( 404 ) . json ( { error : "Mission not found" } ) ;
61- return ;
62- }
57+ kmzRoutes . get (
58+ "/download/:missionId" ,
59+ authMiddleware ,
60+ async ( req : AuthRequest , res ) => {
61+ try {
62+ const db = getDb ( ) ;
63+ const row = db
64+ . prepare ( "SELECT * FROM missions WHERE id = ? AND user_id = ?" )
65+ . get ( req . params . missionId , req . userId ) as any ;
66+ if ( ! row ) {
67+ res . status ( 404 ) . json ( { error : "Mission not found" } ) ;
68+ return ;
69+ }
6370
64- const mission : Mission = {
65- id : row . id ,
66- name : row . name ,
67- userId : row . user_id ,
68- createdAt : row . created_at ,
69- updatedAt : row . updated_at ,
70- config : JSON . parse ( row . config ) ,
71- waypoints : JSON . parse ( row . waypoints ) ,
72- pois : JSON . parse ( row . pois || "[]" ) ,
73- obstacles : JSON . parse ( row . obstacles || "[]" ) ,
74- } ;
71+ const mission : Mission = {
72+ id : row . id ,
73+ name : row . name ,
74+ userId : row . user_id ,
75+ createdAt : row . created_at ,
76+ updatedAt : row . updated_at ,
77+ config : JSON . parse ( row . config ) ,
78+ waypoints : JSON . parse ( row . waypoints ) ,
79+ pois : JSON . parse ( row . pois || "[]" ) ,
80+ obstacles : JSON . parse ( row . obstacles || "[]" ) ,
81+ } ;
7582
76- const buffer = await generateKmzBuffer ( mission ) ;
77- const filename = `${ mission . name . replace ( / [ ^ a - z A - Z 0 - 9 _ - ] / g, "_" ) } .kmz` ;
78- res . setHeader ( "Content-Type" , "application/vnd.google-earth.kmz" ) ;
79- res . setHeader ( "Content-Disposition" , `attachment; filename="${ filename } "` ) ;
80- res . send ( buffer ) ;
81- } catch ( err : any ) {
82- console . error ( "KMZ download error:" , err ) ;
83- res . status ( 500 ) . json ( { error : err . message || "Failed to generate KMZ" } ) ;
84- }
85- } ) ;
83+ const buffer = await generateKmzBuffer ( mission ) ;
84+ const filename = `${ mission . name . replace ( / [ ^ a - z A - Z 0 - 9 _ - ] / g, "_" ) } .kmz` ;
85+ res . setHeader ( "Content-Type" , "application/vnd.google-earth.kmz" ) ;
86+ res . setHeader (
87+ "Content-Disposition" ,
88+ `attachment; filename="${ filename } "` ,
89+ ) ;
90+ res . send ( buffer ) ;
91+ } catch ( err : any ) {
92+ console . error ( "KMZ download error:" , err ) ;
93+ res . status ( 500 ) . json ( { error : err . message || "Failed to generate KMZ" } ) ;
94+ }
95+ } ,
96+ ) ;
8697
8798// Import KMZ file
8899kmzRoutes . post (
@@ -123,7 +134,7 @@ kmzRoutes.post(
123134 res . json ( { id : missionId , config, waypoints, pois } ) ;
124135 } catch ( err : any ) {
125136 console . error ( "KMZ import error:" , err ) ;
126- res . status ( 500 ) . json ( { error : err . message || "Failed to parse KMZ" } ) ;
137+ res . status ( 500 ) . json ( { error : "Failed to parse KMZ" } ) ;
127138 }
128139 } ,
129140) ;
0 commit comments