The_Vibe/packages/backend/src/modules/drivers/drivers.controller.ts
2026-03-06 09:05:31 -05:00

89 lines
2.2 KiB
TypeScript

import { Controller, Get, Post, Patch, Body, Param, Query, UseGuards, Request } from '@nestjs/common';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { RolesGuard, Roles } from '../auth/guards/roles.guard';
import { DriversService } from './drivers.service';
class UpdateLocationDto {
lng: number;
lat: number;
heading?: number;
speedKmh?: number;
}
@Controller('drivers')
@UseGuards(JwtAuthGuard, RolesGuard)
export class DriversController {
constructor(private readonly driversService: DriversService) {}
// ---- Driver self-service endpoints ----
@Get('me/profile')
@Roles('driver')
getProfile(@Request() req) {
return this.driversService.getProfile(req.user.driverId);
}
@Get('me/session')
@Roles('driver')
getSession(@Request() req) {
return this.driversService.getSession(req.user.driverId);
}
@Post('me/session/start')
@Roles('driver')
startSession(@Request() req) {
return this.driversService.startSession(req.user.driverId);
}
@Post('me/session/end')
@Roles('driver')
endSession(@Request() req) {
return this.driversService.endSession(req.user.driverId);
}
@Get('me/earnings')
@Roles('driver')
getEarnings(@Request() req, @Query('days') days?: string) {
return this.driversService.getEarningsHistory(req.user.driverId, days ? parseInt(days) : 30);
}
@Get('me/analytics')
@Roles('driver')
getAnalytics(@Request() req) {
return this.driversService.getAnalytics(req.user.driverId);
}
@Patch('me/location')
@Roles('driver')
updateLocation(@Request() req, @Body() dto: UpdateLocationDto) {
return this.driversService.updateLocation(
req.user.driverId,
dto.lng,
dto.lat,
dto.heading,
dto.speedKmh,
);
}
@Patch('me/availability')
@Roles('driver')
setAvailability(@Request() req, @Body('available') available: boolean) {
return this.driversService.setAvailability(req.user.driverId, available);
}
// ---- Public endpoints ----
@Get('nearby')
getNearbyDrivers(
@Query('lng') lng: string,
@Query('lat') lat: string,
@Query('radius') radius?: string,
) {
return this.driversService.getNearbyDrivers(
parseFloat(lng),
parseFloat(lat),
radius ? parseFloat(radius) : 5,
);
}
}