Skip to content

Commit f9e452c

Browse files
committed
lets goo!!!
1 parent 04227a8 commit f9e452c

8 files changed

Lines changed: 1419 additions & 200 deletions

File tree

apps/backend/src/config/database.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,80 @@ export const initDatabase = async (): Promise<void> => {
215215
CREATE INDEX IF NOT EXISTS idx_calibration_corners_session ON calibration_corners(session_id);
216216
`);
217217

218+
// Navigation sessions for tracking user routes and GPS data
219+
await client.query(`
220+
CREATE TABLE IF NOT EXISTS navigation_sessions (
221+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
222+
floor_id UUID REFERENCES floors(id) ON DELETE CASCADE,
223+
building_id UUID REFERENCES buildings(id) ON DELETE CASCADE,
224+
start_room_id TEXT NOT NULL,
225+
start_room_name TEXT,
226+
end_room_id TEXT NOT NULL,
227+
end_room_name TEXT,
228+
planned_path JSONB NOT NULL,
229+
planned_directions JSONB NOT NULL,
230+
planned_door_sequence JSONB,
231+
total_distance DOUBLE PRECISION,
232+
device_info JSONB,
233+
status TEXT DEFAULT 'preview',
234+
started_at TIMESTAMP,
235+
completed_at TIMESTAMP,
236+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
237+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
238+
);
239+
`);
240+
241+
// Add new columns if they don't exist (for existing databases)
242+
await client.query(`
243+
DO $$
244+
BEGIN
245+
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'navigation_sessions' AND column_name = 'building_id') THEN
246+
ALTER TABLE navigation_sessions ADD COLUMN building_id UUID REFERENCES buildings(id) ON DELETE CASCADE;
247+
END IF;
248+
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'navigation_sessions' AND column_name = 'planned_door_sequence') THEN
249+
ALTER TABLE navigation_sessions ADD COLUMN planned_door_sequence JSONB;
250+
END IF;
251+
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'navigation_sessions' AND column_name = 'total_distance') THEN
252+
ALTER TABLE navigation_sessions ADD COLUMN total_distance DOUBLE PRECISION;
253+
END IF;
254+
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'navigation_sessions' AND column_name = 'device_info') THEN
255+
ALTER TABLE navigation_sessions ADD COLUMN device_info JSONB;
256+
END IF;
257+
END $$;
258+
`);
259+
260+
await client.query(`
261+
CREATE INDEX IF NOT EXISTS idx_navigation_sessions_floor ON navigation_sessions(floor_id);
262+
`);
263+
264+
await client.query(`
265+
CREATE INDEX IF NOT EXISTS idx_navigation_sessions_status ON navigation_sessions(status);
266+
`);
267+
268+
// GPS tracking points during navigation
269+
await client.query(`
270+
CREATE TABLE IF NOT EXISTS navigation_gps_points (
271+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
272+
session_id UUID NOT NULL REFERENCES navigation_sessions(id) ON DELETE CASCADE,
273+
latitude DOUBLE PRECISION NOT NULL,
274+
longitude DOUBLE PRECISION NOT NULL,
275+
accuracy DOUBLE PRECISION,
276+
altitude DOUBLE PRECISION,
277+
heading DOUBLE PRECISION,
278+
speed DOUBLE PRECISION,
279+
timestamp BIGINT NOT NULL,
280+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
281+
);
282+
`);
283+
284+
await client.query(`
285+
CREATE INDEX IF NOT EXISTS idx_navigation_gps_session ON navigation_gps_points(session_id);
286+
`);
287+
288+
await client.query(`
289+
CREATE INDEX IF NOT EXISTS idx_navigation_gps_timestamp ON navigation_gps_points(timestamp);
290+
`);
291+
218292
console.log('Database initialized successfully');
219293
} catch (error) {
220294
console.error('Error initializing database:', error);

apps/backend/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import floorFeatureRoutes from './routes/floorFeatures';
1313
import graphRoutes from './routes/graph';
1414
import debugRoutes from './routes/debug';
1515
import calibrationRoutes from './routes/calibration';
16+
import navigationRoutes from './routes/navigation';
1617

1718
dotenv.config();
1819

@@ -58,6 +59,7 @@ app.use('/api/qr', qrRoutes);
5859
app.use('/api/graph', graphRoutes);
5960
app.use('/api/debug', debugRoutes);
6061
app.use('/api/calibration', calibrationRoutes);
62+
app.use('/api/navigation', navigationRoutes);
6163

6264
// Health check
6365
app.get('/health', (req, res) => {

0 commit comments

Comments
 (0)