1- import { getDistance } from "geolib" ;
2- import { createActivity } from "../../../controllers/activities/createActivity" ;
31import { getActivityById } from "../../../controllers/activities/getActivityById" ;
4- import { createActivitySummary } from "../../../controllers/activities/summary/createActivitySummary" ;
52import { getActivitySummaryById } from "../../../controllers/activities/summary/getActivitySummaryById" ;
6- import { getBikeById } from "../../../controllers/bikes/getBikeById" ;
7- import { Bike } from "../../../models/bike" ;
8- import { getReverseGeocoding } from "../../../controllers/maps/getReverseGeocoding" ;
9- import { updatePersonalBestActivitySummary } from "../../../controllers/activities/summary/updatePersonalBestActivitySummary" ;
103
114export const activitySummaryRequestSchema = {
125 params : {
@@ -17,7 +10,7 @@ export const activitySummaryRequestSchema = {
1710 }
1811} ;
1912
20- export async function handleActivitySummaryRequest ( request : RequestWithKey , env : Env ) {
13+ export async function handleActivitySummaryRequest ( request : RequestWithKey , env : Env , context : EventContext < Env , string , null > ) {
2114 const { activityId } = request . params ;
2215
2316 const activity = await getActivityById ( env . DATABASE , activityId ) ;
@@ -28,69 +21,21 @@ export async function handleActivitySummaryRequest(request: RequestWithKey, env:
2821 let activitySummary = await getActivitySummaryById ( env . DATABASE , activity . id ) ;
2922
3023 if ( ! activitySummary ) {
31- const bucket = await env . BUCKET . get ( `activities/${ activity . id } .json` ) ;
32-
33- if ( ! bucket )
34- return Response . json ( { success : false } ) ;
35-
36- const sessions = await bucket . json < Array < any > > ( ) ;
37-
38- let startArea = null ;
39- let finishArea = null ;
40- let distance = 0 ;
41- let elevation = 0 ;
42- let maxSpeed = 0 ;
43-
44- if ( sessions . length && sessions [ 0 ] . locations . length ) {
45- async function getAreaName ( coords : any ) {
46- const geocoding = await getReverseGeocoding ( env . GOOGLE_MAPS_API_TOKEN , coords . latitude , coords . longitude ) ;
47-
48- if ( geocoding . results . length ) {
49- const geocodingResult = geocoding . results [ 0 ] ;
24+ const durableObjectId = env . ACTIVITY_DURABLE_OBJECT . idFromName ( "default" ) ;
25+ const durableObject = env . ACTIVITY_DURABLE_OBJECT . get ( durableObjectId ) ;
5026
51- const geocodingComponent = geocodingResult . address_components . find ( ( component : any ) => component . types . includes ( "postal_town" ) ) ?? geocodingResult . address_components . find ( ( component : any ) => component . types . includes ( "political" ) ) ?? geocodingResult . address_components . find ( ( component : any ) => component . types . includes ( "country" ) ) ;
52-
53- return geocodingComponent ?. long_name ?? null ;
54- }
55-
56- return null ;
57- }
58-
59- await Promise . all ( [
60- getAreaName ( sessions [ 0 ] . locations [ 0 ] . coords ) . then ( ( name ) => startArea = name ) ,
61- getAreaName ( sessions [ sessions . length - 1 ] . locations [ sessions [ sessions . length - 1 ] . locations . length - 1 ] . coords ) . then ( ( name ) => finishArea = name )
62- ] ) ;
63- }
64-
65- const speeds = [ ] ;
66-
67- for ( let session of sessions ) {
68- for ( let index = 1 ; index < session . locations . length ; index ++ ) {
69- distance += getDistance ( session . locations [ index - 1 ] . coords , session . locations [ index ] . coords , 1 ) ;
70-
71- speeds . push ( session . locations [ index ] . coords . speed ) ;
72-
73- elevation += Math . max ( 0 , session . locations [ index ] . coords . altitude - session . locations [ index - 1 ] . coords . altitude ) ;
74-
75- if ( session . locations [ index ] . coords . speed > maxSpeed )
76- maxSpeed = session . locations [ index ] . coords . speed ;
77- }
78- }
79-
80- const speedSum = speeds . reduce ( ( a , b ) => a + b , 0 ) ;
81- const averageSpeed = ( speedSum / speeds . length ) || 0 ;
82-
83- let distancePersonalBest = null ;
84- let averageSpeedPersonalBest = null ;
85- let elevationPersonalBest = null ;
86- let maxSpeedPersonalBest = null ;
87-
88- activitySummary = await createActivitySummary ( env . DATABASE , activity . id , startArea , finishArea , distance , distancePersonalBest , averageSpeed , averageSpeedPersonalBest , elevation , elevationPersonalBest , maxSpeed , maxSpeedPersonalBest ) ;
89-
90- if ( ! activitySummary )
91- return Response . json ( { success : false } ) ;
92-
93- await updatePersonalBestActivitySummary ( env . DATABASE , activity . user ) ;
27+ context . waitUntil ( durableObject . fetch ( "" , {
28+ body : JSON . stringify ( {
29+ activityId : activity . id
30+ } )
31+ } ) ) ;
32+
33+ return Response . json ( {
34+ success : true
35+ } , {
36+ status : 102 ,
37+ statusText : "Processing"
38+ } ) ;
9439 }
9540
9641 return Response . json ( {
0 commit comments