89 lines
2.2 KiB
TypeScript
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,
|
|
);
|
|
}
|
|
}
|