Update backend to use firebase-admin SDK for FCM
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
|
||||
import { Body, Controller, Get, Param, Patch, Post, Query, UploadedFile, UseGuards, UseInterceptors } from '@nestjs/common';
|
||||
import { FileInterceptor } from '@nestjs/platform-express';
|
||||
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
||||
import { TripsService, RequestTripDto } from './trips.service';
|
||||
import { TripAudioService } from './trip-audio.service';
|
||||
import { TripStatus } from './entities/trip.entity';
|
||||
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
|
||||
import { RolesGuard } from '../auth/guards/roles.guard';
|
||||
@@ -12,7 +14,10 @@ import { CurrentUser, AuthUser } from '../auth/decorators/current-user.decorator
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Controller('trips')
|
||||
export class TripsController {
|
||||
constructor(private readonly trips: TripsService) {}
|
||||
constructor(
|
||||
private readonly trips: TripsService,
|
||||
private readonly audio: TripAudioService,
|
||||
) {}
|
||||
|
||||
/** سرد رحلات المستأجر — للوحة الأدمن، بترشيح الحالة (docs/22 — N4). */
|
||||
@UseGuards(RolesGuard)
|
||||
@@ -70,4 +75,39 @@ export class TripsController {
|
||||
const actor = user.role === 'driver' ? 'driver' : 'rider';
|
||||
return this.trips.cancel(user.tenantId, id, actor, user.userId);
|
||||
}
|
||||
|
||||
// ---- التسجيل الصوتي (R2) ----
|
||||
|
||||
/** رفع مقطع صوتي مرتبط بالرحلة. */
|
||||
@Post(':id/audio')
|
||||
@UseInterceptors(FileInterceptor('file', { limits: { fileSize: 50 * 1024 * 1024 } }))
|
||||
uploadAudio(
|
||||
@CurrentUser() user: AuthUser,
|
||||
@Param('id') id: string,
|
||||
@UploadedFile() file: any,
|
||||
@Body('duration_sec') durationSec?: string,
|
||||
@Body('destination_name') destName?: string,
|
||||
) {
|
||||
const role = user.role === 'driver' ? 'driver' as const : 'rider' as const;
|
||||
return this.audio.upload(user.tenantId, id, user.userId, role, file, {
|
||||
duration_sec: durationSec ? parseInt(durationSec, 10) : undefined,
|
||||
destination_name: destName,
|
||||
});
|
||||
}
|
||||
|
||||
/** كل المقاطع الصوتية للرحلة. */
|
||||
@Get(':id/audio')
|
||||
listAudio(@CurrentUser() user: AuthUser, @Param('id') id: string) {
|
||||
return this.audio.listByTrip(user.tenantId, id);
|
||||
}
|
||||
|
||||
/** رابط تحميل مقطع صوتي. */
|
||||
@Get(':id/audio/:audioId')
|
||||
getAudioUrl(
|
||||
@CurrentUser() user: AuthUser,
|
||||
@Param('id') id: string,
|
||||
@Param('audioId') audioId: string,
|
||||
) {
|
||||
return this.audio.getDownloadUrl(user.tenantId, audioId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user