fix(journey): share the stays of a day report only with the recorded days, and hold the share read tests to the two new flags

This commit is contained in:
Maurice
2026-10-21 19:08:25 +02:00
parent 8f53d98d45
commit d62fc284e1
32 changed files with 43 additions and 35 deletions
@@ -44,7 +44,8 @@ const WITHHELD = { status: 'withheld' } as const;
* while the others still draw. Nothing is stored here and nothing is written:
* a layer switched on in a browser only ever hides what the reader may see.
* The public answer is cut on the server, by the link's flags, never by the
* client: the map switched off shares nothing of it.
* client: the map switched off shares nothing of it, and the stays, being
* taken from a recording, travel only with the recorded days.
*/
@Injectable()
export class JourneyMapService {
@@ -91,7 +92,7 @@ export class JourneyMapService {
const [places, routes, stays, recordings] = await Promise.all([
sharePlan ? this.layer('places', journeyId, () => this.places(journeyId, published)) : WITHHELD,
sharePlan && journey.show_trip_tracks ? this.layer('routes', journeyId, () => this.routes(journeyId)) : WITHHELD,
this.layer('stays', journeyId, () => this.stays(journeyId, published)),
link.share_recordings ? this.layer('stays', journeyId, () => this.stays(journeyId, published)) : WITHHELD,
link.share_recordings
? this.layer('recordings', journeyId, () => this.recordings(journeyId, published))
: WITHHELD,
+1 -1
View File
@@ -780,7 +780,7 @@ export class JourneyMcp {
@Tool({
name: 'create_journey_share_link',
description:
'Create or update the public share link for a journey. Owner only. Flags left out keep their current value on an existing link; a new link defaults to timeline/gallery/map on and plan/recordings off. share_plan puts the planned places and GPX tracks on the shared map, share_recordings the recorded days that have a published entry; neither shows anything while share_map is off.',
'Create or update the public share link for a journey. Owner only. Flags left out keep their current value on an existing link; a new link defaults to timeline/gallery/map on and plan/recordings off. share_plan puts the planned places and GPX tracks on the shared map, share_recordings the recorded days that have a published entry and the stays of published entries; neither shows anything while share_map is off.',
inputSchema: {
journeyId: idSchema,
share_timeline: z.boolean().optional(),
@@ -280,7 +280,7 @@ describe('JourneyMapService.publicMapLayers', () => {
});
});
it('JRNMAP-010: a new link shares neither the plan nor the recorded days; stays of published entries do show', async () => {
it('JRNMAP-010: a new link shares neither the plan nor the recorded days, nor the stays taken from a recording', async () => {
const { token, journey, user } = await shared({});
const published = await makeJourneyEntry(orm, journey.id, user.id, { entry_date: '2026-05-14' });
const draft = await makeJourneyEntry(orm, journey.id, user.id, { entry_date: '2026-05-14', is_draft: 1 });
@@ -293,7 +293,11 @@ describe('JourneyMapService.publicMapLayers', () => {
expect(layers?.places).toEqual({ status: 'withheld' });
expect(layers?.routes).toEqual({ status: 'withheld' });
expect(layers?.recordings).toEqual({ status: 'withheld' });
expect(layers?.stays.status === 'ok' && layers.stays.items.map((s) => s.entry_id)).toEqual([published.id]);
expect(layers?.stays).toEqual({ status: 'withheld' });
await share.createOrUpdateJourneyShareLink(journey.id, user.id, { share_recordings: true });
const recorded = await map.publicMapLayers(token);
expect(recorded?.stays.status === 'ok' && recorded.stays.items.map((s) => s.entry_id)).toEqual([published.id]);
});
it('JRNMAP-011: the plan shows with share_plan, tied only to published entries; routes also need the track switch', async () => {
@@ -945,7 +945,7 @@ describe('parity — JourneyShareTokensRepository reads match the legacy stateme
journeyEntryPhotosRepo = await createTestJourneyEntryPhotosRepo(testDb);
});
it('JOURNEY-SHARE-P01: findFlagsByJourneyId (JS1) matches the legacy 5-column read', async () => {
it('JOURNEY-SHARE-P01: findFlagsByJourneyId (JS1) matches the 7-column read', async () => {
const { user } = createUser(testDb);
const journey = createJourney(testDb, user.id);
await svc.createOrUpdateJourneyShareLink(journey.id, user.id, {
@@ -958,7 +958,7 @@ describe('parity — JourneyShareTokensRepository reads match the legacy stateme
const legacy = testDb
// test-sql-allow: the legacy statement is the oracle the repository read is held to.
.prepare(
'SELECT token, share_timeline, share_gallery, share_map, newest_first FROM journey_share_tokens WHERE journey_id = ?',
'SELECT token, share_timeline, share_gallery, share_map, newest_first, share_plan, share_recordings FROM journey_share_tokens WHERE journey_id = ?',
)
.get(journey.id);
@@ -1115,6 +1115,8 @@ describe('parity — JourneyShareTokensRepository reads match the legacy stateme
share_gallery,
share_map,
newest_first,
share_plan: false,
share_recordings: false,
});
}
}
+1 -1
View File
@@ -966,7 +966,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'خطة الرحلة',
'journey.share.planHint': 'الأماكن المخطَّطة ومسارات GPX للرحلات المرتبطة على الخريطة',
'journey.share.recordings': 'المسارات المسجَّلة',
'journey.share.recordingsHint': 'الأيام المسجَّلة التي لها تدوينة منشورة. تُظهر أين كنت، بما في ذلك مكان إقامتك.',
'journey.share.recordingsHint': 'الأيام المسجَّلة ومحطات التوقف المأخوذة منها، للأيام التي لها تدوينة منشورة. تُظهر أين كنت ومتى، بما في ذلك مكان إقامتك.',
'journey.share.needsMap': 'شارك الخريطة لتفعيل هذا',
};
export default journey;
+1 -1
View File
@@ -967,7 +967,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Səyahət planı',
'journey.share.planHint': 'Bağlı səyahətlərin planlaşdırılmış yerləri və GPX marşrutları xəritədə',
'journey.share.recordings': 'Qeydə alınmış marşrutlar',
'journey.share.recordingsHint': 'Dərc olunmuş qeydi olan qeydə alınmış günlər. Harada olduğunu, qaldığın yeri də göstərir.',
'journey.share.recordingsHint': 'Dərc olunmuş qeydi olan qeydə alınmış günlər və onlardan götürülmüş dayanacaqlar. Harada və nə vaxt olduğunu, qaldığın yeri də göstərir.',
'journey.share.needsMap': 'Bunu açmaq üçün xəritəni paylaş',
};
export default journey;
+1 -1
View File
@@ -896,7 +896,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Plano da viagem',
'journey.share.planHint': 'Lugares planejados e rotas GPX das viagens vinculadas no mapa',
'journey.share.recordings': 'Rotas gravadas',
'journey.share.recordingsHint': 'Dias gravados que têm um registro publicado. Mostram onde você esteve, inclusive sua hospedagem.',
'journey.share.recordingsHint': 'Dias gravados e as paradas tiradas deles, nos dias com um registro publicado. Mostram onde e quando você esteve, inclusive sua hospedagem.',
'journey.share.needsMap': 'Compartilhe o mapa para ativar isto',
};
export default journey;
+1 -1
View File
@@ -899,7 +899,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Pla del viatge',
'journey.share.planHint': 'Llocs planificats i rutes GPX dels viatges vinculats al mapa',
'journey.share.recordings': 'Rutes enregistrades',
'journey.share.recordingsHint': 'Dies enregistrats amb una entrada publicada. Mostren on eres, també el teu allotjament.',
'journey.share.recordingsHint': 'Dies enregistrats i les parades que se\'n treuen, en els dies amb una entrada publicada. Mostren on i quan eres, també el teu allotjament.',
'journey.share.needsMap': 'Comparteix el mapa per activar-ho',
};
export default journey;
+1 -1
View File
@@ -910,7 +910,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Plán cesty',
'journey.share.planHint': 'Plánovaná místa a trasy GPX propojených cest na mapě',
'journey.share.recordings': 'Zaznamenané trasy',
'journey.share.recordingsHint': 'Zaznamenané dny se zveřejněným záznamem. Ukazují, kde jste byli, i vaše ubytování.',
'journey.share.recordingsHint': 'Zaznamenané dny a zastávky z nich převzaté, u dnů se zveřejněným záznamem. Ukazují, kde a kdy jste byli, i vaše ubytování.',
'journey.share.needsMap': 'Pro zapnutí sdílejte mapu',
};
export default journey;
+1 -1
View File
@@ -904,7 +904,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Reiseplanung',
'journey.share.planHint': 'Geplante Orte und GPX-Strecken der verknüpften Reisen auf der Karte',
'journey.share.recordings': 'Aufgezeichnete Strecken',
'journey.share.recordingsHint': 'Aufgezeichnete Tage mit veröffentlichtem Eintrag. Sie zeigen, wo du warst, auch deine Unterkunft.',
'journey.share.recordingsHint': 'Aufgezeichnete Tage und die daraus übernommenen Aufenthalte, an Tagen mit veröffentlichtem Eintrag. Sie zeigen, wo und wann du warst, auch deine Unterkunft.',
'journey.share.needsMap': 'Teile die Karte, um das einzuschalten',
};
export default journey;
+1 -1
View File
@@ -886,7 +886,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Trip plan',
'journey.share.planHint': 'Planned places and GPX routes of the linked trips on the map',
'journey.share.recordings': 'Recorded routes',
'journey.share.recordingsHint': 'Recorded days that have a published entry. They show where you were, your accommodation too.',
'journey.share.recordingsHint': 'Recorded days and the stays taken from them, on days with a published entry. They show where and when you were, your accommodation too.',
'journey.share.needsMap': 'Share the map to switch this on',
};
export default journey;
+1 -1
View File
@@ -898,7 +898,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Plan del viaje',
'journey.share.planHint': 'Lugares planificados y rutas GPX de los viajes vinculados en el mapa',
'journey.share.recordings': 'Rutas grabadas',
'journey.share.recordingsHint': 'Días grabados con una entrada publicada. Muestran dónde estuviste, también tu alojamiento.',
'journey.share.recordingsHint': 'Días grabados y las paradas tomadas de ellos, en los días con una entrada publicada. Muestran dónde y cuándo estuviste, también tu alojamiento.',
'journey.share.needsMap': 'Comparte el mapa para activarlo',
};
export default journey;
+1 -1
View File
@@ -890,7 +890,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Reisiplaan',
'journey.share.planHint': 'Seotud reiside planeeritud kohad ja GPX-marsruudid kaardil',
'journey.share.recordings': 'Salvestatud marsruudid',
'journey.share.recordingsHint': 'Salvestatud päevad, millel on avaldatud sissekanne. Need näitavad, kus sa olid, ka su majutust.',
'journey.share.recordingsHint': 'Salvestatud päevad ja neist võetud peatused päevadel, millel on avaldatud sissekanne. Need näitavad, kus ja millal sa olid, ka su majutust.',
'journey.share.needsMap': 'Selle sisselülitamiseks jaga kaarti',
};
export default journey;
+1 -1
View File
@@ -897,7 +897,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Programme du voyage',
'journey.share.planHint': 'Lieux prévus et trajets GPX des voyages liés sur la carte',
'journey.share.recordings': 'Trajets enregistrés',
'journey.share.recordingsHint': 'Jours enregistrés ayant un récit publié. Ils montrent où vous étiez, y compris votre hébergement.',
'journey.share.recordingsHint': 'Jours enregistrés et les arrêts qui en sont tirés, les jours ayant un récit publié. Ils montrent où et quand vous étiez, y compris votre hébergement.',
'journey.share.needsMap': 'Partagez la carte pour activer ceci',
};
export default journey;
+1 -1
View File
@@ -907,7 +907,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Σχέδιο ταξιδιού',
'journey.share.planHint': 'Προγραμματισμένα μέρη και διαδρομές GPX των συνδεδεμένων ταξιδιών στον χάρτη',
'journey.share.recordings': 'Καταγεγραμμένες διαδρομές',
'journey.share.recordingsHint': 'Καταγεγραμμένες μέρες με δημοσιευμένη καταχώριση. Δείχνουν πού ήσουν, και το κατάλυμά σου.',
'journey.share.recordingsHint': 'Καταγεγραμμένες μέρες και οι στάσεις που προέρχονται από αυτές, σε μέρες με δημοσιευμένη καταχώριση. Δείχνουν πού και πότε ήσουν, και το κατάλυμά σου.',
'journey.share.needsMap': 'Μοιράσου τον χάρτη για να το ενεργοποιήσεις',
};
export default journey;
+1 -1
View File
@@ -894,7 +894,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Úti terv',
'journey.share.planHint': 'A kapcsolt utak tervezett helyei és GPX-útvonalai a térképen',
'journey.share.recordings': 'Rögzített útvonalak',
'journey.share.recordingsHint': 'Rögzített napok, amelyekhez közzétett bejegyzés tartozik. Megmutatják, hol jártál, a szállásodat is.',
'journey.share.recordingsHint': 'Rögzített napok és a belőlük átvett megállók azokon a napokon, amelyekhez közzétett bejegyzés tartozik. Megmutatják, hol és mikor jártál, a szállásodat is.',
'journey.share.needsMap': 'Oszd meg a térképet a bekapcsoláshoz',
};
export default journey;
+1 -1
View File
@@ -871,7 +871,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Rencana perjalanan',
'journey.share.planHint': 'Tempat yang direncanakan dan rute GPX dari perjalanan tertaut di peta',
'journey.share.recordings': 'Rute terekam',
'journey.share.recordingsHint': 'Hari terekam yang punya catatan terbit. Menunjukkan di mana kamu berada, termasuk penginapanmu.',
'journey.share.recordingsHint': 'Hari terekam dan persinggahan yang diambil darinya, pada hari yang punya catatan terbit. Menunjukkan di mana dan kapan kamu berada, termasuk penginapanmu.',
'journey.share.needsMap': 'Bagikan peta untuk mengaktifkan ini',
};
export default journey;
+1 -1
View File
@@ -898,7 +898,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Programma del viaggio',
'journey.share.planHint': 'Luoghi pianificati e percorsi GPX dei viaggi collegati sulla mappa',
'journey.share.recordings': 'Percorsi registrati',
'journey.share.recordingsHint': 'Giorni registrati con una voce pubblicata. Mostrano dove sei stato, anche il tuo alloggio.',
'journey.share.recordingsHint': 'Giorni registrati e le soste ricavate da essi, nei giorni con una voce pubblicata. Mostrano dove e quando sei stato, anche il tuo alloggio.',
'journey.share.needsMap': 'Condividi la mappa per attivarlo',
};
export default journey;
+1 -1
View File
@@ -857,7 +857,7 @@ const journey: TranslationStrings = {
'journey.share.plan': '旅行の予定',
'journey.share.planHint': 'リンクした旅行の予定の場所とGPXルートを地図に表示',
'journey.share.recordings': '記録したルート',
'journey.share.recordingsHint': '公開済みのエントリーがある記録した日。宿泊先も含め、どこにいたかがわかります。',
'journey.share.recordingsHint': '公開済みのエントリーがある日の記録と、そこから取り込んだ滞在。宿泊先も含め、いつどこにいたかがわかります。',
'journey.share.needsMap': '有効にするには地図を共有してください',
};
export default journey;
+1 -1
View File
@@ -854,7 +854,7 @@ const journey: TranslationStrings = {
'journey.share.plan': '여행 계획',
'journey.share.planHint': '연결된 여행의 계획한 장소와 GPX 경로를 지도에 표시',
'journey.share.recordings': '기록된 경로',
'journey.share.recordingsHint': '게시된 항목이 있는 기록된 날. 숙소를 포함해 어디에 있었는지 보여줍니다.',
'journey.share.recordingsHint': '게시된 항목이 있는 날의 기록과 거기서 가져온 머문 곳. 숙소를 포함해 언제 어디에 있었는지 보여줍니다.',
'journey.share.needsMap': '이 기능을 켜려면 지도를 공유하세요',
};
export default journey;
+1 -1
View File
@@ -899,7 +899,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Reisplanning',
'journey.share.planHint': 'Geplande plekken en GPX-routes van de gekoppelde reizen op de kaart',
'journey.share.recordings': 'Opgenomen routes',
'journey.share.recordingsHint': 'Opgenomen dagen met een gepubliceerd verhaal. Ze tonen waar je was, ook je verblijf.',
'journey.share.recordingsHint': 'Opgenomen dagen en de stops die eruit zijn overgenomen, op dagen met een gepubliceerd verhaal. Ze tonen waar en wanneer je was, ook je verblijf.',
'journey.share.needsMap': 'Deel de kaart om dit aan te zetten',
};
export default journey;
+1 -1
View File
@@ -941,7 +941,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Plan podróży',
'journey.share.planHint': 'Zaplanowane miejsca i trasy GPX powiązanych podróży na mapie',
'journey.share.recordings': 'Nagrane trasy',
'journey.share.recordingsHint': 'Nagrane dni z opublikowanym wpisem. Pokazują, gdzie byłeś, także nocleg.',
'journey.share.recordingsHint': 'Nagrane dni i przejęte z nich postoje, w dniach z opublikowanym wpisem. Pokazują, gdzie i kiedy byłeś, także nocleg.',
'journey.share.needsMap': 'Udostępnij mapę, aby to włączyć',
};
export default journey;
+1 -1
View File
@@ -940,7 +940,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'План поездки',
'journey.share.planHint': 'Запланированные места и GPX-маршруты связанных поездок на карте',
'journey.share.recordings': 'Записанные маршруты',
'journey.share.recordingsHint': 'Записанные дни с опубликованной записью. Они показывают, где вы были, в том числе ваше жильё.',
'journey.share.recordingsHint': 'Записанные дни и взятые из них остановки, в дни с опубликованной записью. Они показывают, где и когда вы были, в том числе ваше жильё.',
'journey.share.needsMap': 'Откройте доступ к карте, чтобы включить это',
};
export default journey;
+1 -1
View File
@@ -916,7 +916,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Plán cesty',
'journey.share.planHint': 'Plánované miesta a trasy GPX prepojených ciest na mape',
'journey.share.recordings': 'Zaznamenané trasy',
'journey.share.recordingsHint': 'Zaznamenané dni so zverejneným záznamom. Ukazujú, kde ste boli, aj vaše ubytovanie.',
'journey.share.recordingsHint': 'Zaznamenané dni a zastávky z nich prevzaté, v dňoch so zverejneným záznamom. Ukazujú, kde a kedy ste boli, aj vaše ubytovanie.',
'journey.share.needsMap': 'Ak to chcete zapnúť, zdieľajte mapu',
};
export default journey;
+1 -1
View File
@@ -890,7 +890,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Resplan',
'journey.share.planHint': 'Planerade platser och GPX-rutter för de länkade resorna på kartan',
'journey.share.recordings': 'Inspelade rutter',
'journey.share.recordingsHint': 'Inspelade dagar som har ett publicerat inlägg. De visar var du var, även ditt boende.',
'journey.share.recordingsHint': 'Inspelade dagar och de stopp som hämtats från dem, på dagar med ett publicerat inlägg. De visar var och när du var, även ditt boende.',
'journey.share.needsMap': 'Dela kartan för att slå på detta',
};
export default journey;
+1 -1
View File
@@ -847,7 +847,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'แผนการเดินทาง',
'journey.share.planHint': 'สถานที่ตามแผนและเส้นทาง GPX ของทริปที่เชื่อมโยงบนแผนที่',
'journey.share.recordings': 'เส้นทางที่บันทึก',
'journey.share.recordingsHint': 'วันที่บันทึกซึ่งมีบันทึกที่เผยแพร่แล้ว แสดงว่าคุณอยู่ที่ไหน รวมถึงที่พักด้วย',
'journey.share.recordingsHint': 'วันที่บันทึกและจุดแวะที่นำมาจากวันนั้น ในวันที่มีบันทึกที่เผยแพร่แล้ว แสดงว่าคุณอยู่ที่ไหนและเมื่อไร รวมถึงที่พักด้วย',
'journey.share.needsMap': 'แชร์แผนที่เพื่อเปิดใช้งานนี้',
};
export default journey;
+1 -1
View File
@@ -888,7 +888,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Gezi planı',
'journey.share.planHint': 'Bağlı gezilerin planlanan yerleri ve GPX rotaları haritada',
'journey.share.recordings': 'Kaydedilen rotalar',
'journey.share.recordingsHint': 'Yayınlanmış bir girdisi olan kaydedilmiş günler. Nerede olduğunu, konakladığın yeri de gösterir.',
'journey.share.recordingsHint': 'Yayınlanmış bir girdisi olan günlerde kaydedilmiş günler ve onlardan alınan duraklar. Nerede ve ne zaman olduğunu, konakladığın yeri de gösterir.',
'journey.share.needsMap': 'Bunu açmak için haritayı paylaş',
};
export default journey;
+1 -1
View File
@@ -947,7 +947,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'План подорожі',
'journey.share.planHint': 'Заплановані місця й GPX-маршрути пов’язаних подорожей на карті',
'journey.share.recordings': 'Записані маршрути',
'journey.share.recordingsHint': 'Записані дні з опублікованим записом. Вони показують, де ви були, зокрема ваше житло.',
'journey.share.recordingsHint': 'Записані дні та взяті з них зупинки, у дні з опублікованим записом. Вони показують, де і коли ви були, зокрема ваше житло.',
'journey.share.needsMap': 'Відкрийте доступ до карти, щоб увімкнути це',
};
export default journey;
+1 -1
View File
@@ -866,7 +866,7 @@ const journey: TranslationStrings = {
'journey.share.plan': 'Kế hoạch chuyến đi',
'journey.share.planHint': 'Địa điểm dự kiến và tuyến GPX của các chuyến đi liên kết trên bản đồ',
'journey.share.recordings': 'Tuyến đã ghi',
'journey.share.recordingsHint': 'Những ngày đã ghi có bài viết được đăng. Cho thấy bạn đã ở đâu, kể cả chỗ ở.',
'journey.share.recordingsHint': 'Những ngày đã ghi và các điểm dừng lấy từ đó, vào những ngày có bài viết được đăng. Cho thấy bạn đã ở đâu và khi nào, kể cả chỗ ở.',
'journey.share.needsMap': 'Chia sẻ bản đồ để bật mục này',
};
export default journey;
+1 -1
View File
@@ -836,7 +836,7 @@ const journey: TranslationStrings = {
'journey.share.plan': '行程計畫',
'journey.share.planHint': '在地圖上顯示連結行程的計畫地點和 GPX 路線',
'journey.share.recordings': '記錄的路線',
'journey.share.recordingsHint': '有已發布日記的記錄日子。會顯示你去過哪裡,也包括住處。',
'journey.share.recordingsHint': '有已發布日記的日子的記錄,以及從中取用的停留點。會顯示你何時去過哪裡,也包括住處。',
'journey.share.needsMap': '分享地圖後才能開啟',
};
export default journey;
+1 -1
View File
@@ -836,7 +836,7 @@ const journey: TranslationStrings = {
'journey.share.plan': '行程计划',
'journey.share.planHint': '在地图上显示关联行程的计划地点和 GPX 路线',
'journey.share.recordings': '记录的路线',
'journey.share.recordingsHint': '有已发布日记的记录日子。会显示你去过哪里,也包括住处。',
'journey.share.recordingsHint': '有已发布日记的日子的记录,以及从中取用的停留点。会显示你何时去过哪里,也包括住处。',
'journey.share.needsMap': '共享地图后才能开启',
};
export default journey;
+2 -1
View File
@@ -84,7 +84,8 @@ export type JourneyMapLayersResponse = z.infer<typeof journeyMapLayersResponseSc
* GET /api/public/journey/:token/map-layers: the same, cut to what the link
* shares. Nothing while the map is not shared; the plan and its routes only
* with `share_plan`; the recorded days only with `share_recordings` and only
* on a day with a published entry; stays only of published entries.
* on a day with a published entry; the stays, taken from a recording, also
* only with `share_recordings` and only of published entries.
*/
export const journeyPublicMapLayersResponseSchema = journeyMapLayersResponseSchema.extend({
recordings: journeyMapRecordingsLayerSchema,