59 lines
1017 B
TypeScript
59 lines
1017 B
TypeScript
/**
|
|
* Shared DTO shapes for the organizer live map. Both endpoints return plain
|
|
* JSON (no SuperJSON) with `Date` fields serialized as ISO strings and Prisma
|
|
* `Decimal` coordinates coerced to numbers.
|
|
*/
|
|
|
|
export type MapUser = {
|
|
id: number;
|
|
name: string;
|
|
email: string;
|
|
};
|
|
|
|
export type MapTeam = {
|
|
id: number;
|
|
name: string;
|
|
owner: MapUser;
|
|
members: MapUser[];
|
|
};
|
|
|
|
export type MapPosition = {
|
|
userId: number;
|
|
lat: number;
|
|
lon: number;
|
|
accuracy: number | null;
|
|
recordedAt: string;
|
|
};
|
|
|
|
export type MapAnswer = {
|
|
id: number;
|
|
lat: number;
|
|
lon: number;
|
|
createdAt: string;
|
|
memberId: number;
|
|
teamId: number;
|
|
pictureUrl: string | null;
|
|
quest: {
|
|
id: number;
|
|
title_de: string;
|
|
title_en: string;
|
|
};
|
|
};
|
|
|
|
export type HuntMapData = {
|
|
teams: MapTeam[];
|
|
positions: MapPosition[];
|
|
answers: MapAnswer[];
|
|
};
|
|
|
|
export type TrailPoint = {
|
|
lat: number;
|
|
lon: number;
|
|
accuracy: number | null;
|
|
recordedAt: string;
|
|
};
|
|
|
|
export type UserTrail = {
|
|
points: TrailPoint[];
|
|
};
|