Skip to content

Commit

Permalink
chore: some temp api
Browse files Browse the repository at this point in the history
  • Loading branch information
marudor committed Jan 18, 2025
1 parent eefbbc0 commit a431054
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/external/risBoards.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,21 @@ interface CombinedArrivalDeparture {
departure?: StopDeparture;
}

export async function rawRisDepartures(
evaNumber: string,
timeStart: Date,
timeEnd: Date,
) {
const departures = await boardsClient.boardDeparture({
evaNumbers: [evaNumber],
includeStationGroup: true,
timeStart: timeStart.toISOString(),
timeEnd: timeEnd.toISOString(),
});

return departures.data;
}

// NOT SORTED
export async function departureAndArrivals(
evaNumber: string,
Expand Down
35 changes: 35 additions & 0 deletions src/server/rpc/boards.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import type { BoardPublicDeparture } from '@/external/generated/risBoards';
import { rawRisDepartures } from '@/external/risBoards';
import { rpcAppRouter, rpcProcedure } from '@/server/rpc/base';
import type { QueryProcedure } from '@trpc/server/unstable-core-do-not-import';
import { z } from 'zod';

type RawRisDeparturesProcedure = QueryProcedure<{
input: {
evaNumber: string;
timeStart: Date;
timeEnd: Date;
};
output: BoardPublicDeparture;
}>;

export const boardsRpcRouter = rpcAppRouter({
rawDepartures: rpcProcedure
.meta({
openapi: {
method: 'GET',
path: '/boards/v1/departures/{evaNumber}',
},
})
.input(
z.object({
evaNumber: z.string(),
timeStart: z.date(),
timeEnd: z.date(),
}),
)
.output(z.any())
.query(({ input: { evaNumber, timeStart, timeEnd } }) => {
return rawRisDepartures(evaNumber, timeStart, timeEnd);
}) as RawRisDeparturesProcedure,
});
9 changes: 9 additions & 0 deletions src/server/rpc/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { bahnRpcRouter } from '@/server/rpc/bahn';
import { rpcAppRouter } from '@/server/rpc/base';
import { boardsRpcRouter } from '@/server/rpc/boards';
import { coachSequenceRpcRouter } from '@/server/rpc/coachSequence';
import { connectionsRouter } from '@/server/rpc/connections';
import { hafasRpcRouter } from '@/server/rpc/hafas';
Expand All @@ -18,6 +19,7 @@ const mainRouter = rpcAppRouter({
journeys: journeysRpcRouter,
connections: connectionsRouter,
bahn: bahnRpcRouter,
boards: boardsRpcRouter,
});

export type AppRouter = typeof mainRouter;
Expand All @@ -30,6 +32,13 @@ export const rpcHttpHandler = createOpenApiHttpHandler({
maxBodySize: undefined,
});

// const doc = generateOpenApiDocument(mainRouter, {
// title: 'bahn.expert',
// baseUrl: 'https://bahn.expert/api',
// version: '0.0.1',
// });
// fs.writeFileSync('./openapi.json', JSON.stringify(doc), 'utf8');

const rpcHandler = createHTTPHandler({
router: mainRouter,
});
Expand Down
63 changes: 63 additions & 0 deletions src/server/rpc/journeys.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { bahnJourneyDetails } from '@/bahnde/journeyDetails/journeyDetails';
import type {
JourneyEventBased,
JourneyFindResult,
} from '@/external/generated/risJourneysV2';
import {
findJourney,
findJourneyHafasCompatible,
} from '@/external/risJourneys';
import {
findJourneyHafasCompatible as findJourneyHafasCompatibleV2,
findJourney as findJourneyV2,
getJourneyDetails,
} from '@/external/risJourneysV2';
import { getCategoryAndNumberFromName } from '@/server/journeys/journeyDetails';
import { journeyDetails } from '@/server/journeys/v2/journeyDetails';
Expand Down Expand Up @@ -75,7 +80,65 @@ export type JourneyRPCQuery = QueryProcedure<{
output: JourneyResponse | undefined | null;
}>;

type RawRPCJourney = QueryProcedure<{
input: {
journeyId: string;
};
output: JourneyEventBased | undefined;
}>;

type RawRPCJourneyFind = QueryProcedure<{
input: {
journeyNumber: number;
date: Date;
category?: string;
administration?: string;
};
output: JourneyFindResult[];
}>;

export const journeysRpcRouter = rpcAppRouter({
rawJourneyByNumber: rpcProcedure
.meta({
openapi: {
method: 'GET',
path: '/journeys/v1/{journeyId}',
},
})
.input(
z.object({
journeyId: z.string(),
}),
)
.output(z.any())
.query(async ({ input: { journeyId } }) => {
const journey = await getJourneyDetails(journeyId);
if (!journey) {
throw new TRPCError({
code: 'NOT_FOUND',
});
}
return journey;
}) as RawRPCJourney,
rawJourneyFind: rpcProcedure
.meta({
openapi: {
method: 'GET',
path: '/journeys/v1/find',
},
})
.input(
z.object({
journeyNumber: z.number(),
date: z.date(),
category: z.string().optional(),
administration: z.string().optional(),
}),
)
.output(z.any())
.query(({ input: { date, journeyNumber, administration, category } }) => {
return findJourneyV2(journeyNumber, date, category, true, administration);
}) as RawRPCJourneyFind,
findByNumber: rpcProcedure
.input(
z.object({
Expand Down

0 comments on commit a431054

Please sign in to comment.