fix(db): replace crypto.randomUUID with custom UUID generator

This commit is contained in:
2026-08-07 13:11:27 +02:00
parent e47ffbaca9
commit e64e2353d9
3 changed files with 14 additions and 5 deletions
+5 -4
View File
@@ -1,4 +1,5 @@
import { db } from "./client"; import { db } from "./client";
import { generateUUID } from "../utils/uuid";
import { workouts, sets, laps, templates } from "./schema"; import { workouts, sets, laps, templates } from "./schema";
import { eq, desc, sql } from "drizzle-orm"; import { eq, desc, sql } from "drizzle-orm";
import type { WorkoutSet, LapData } from "@types/workout"; import type { WorkoutSet, LapData } from "@types/workout";
@@ -6,7 +7,7 @@ import type { WorkoutSet, LapData } from "@types/workout";
// ─── Templates ─────────────────────────────────────────────── // ─── Templates ───────────────────────────────────────────────
export async function saveTemplate(name: string, poolLength: number, setsData: WorkoutSet[]) { export async function saveTemplate(name: string, poolLength: number, setsData: WorkoutSet[]) {
const id = crypto.randomUUID(); const id = generateUUID();
await db.insert(templates).values({ await db.insert(templates).values({
id, id,
name, name,
@@ -37,7 +38,7 @@ export async function saveWorkout(
setsData: WorkoutSet[], setsData: WorkoutSet[],
templateId?: string templateId?: string
) { ) {
const workoutId = crypto.randomUUID(); const workoutId = generateUUID();
const totalDistance = setsData.reduce((acc, s) => acc + s.distancePerRep * s.repCount, 0); const totalDistance = setsData.reduce((acc, s) => acc + s.distancePerRep * s.repCount, 0);
await db.insert(workouts).values({ await db.insert(workouts).values({
@@ -53,7 +54,7 @@ export async function saveWorkout(
for (let i = 0; i < setsData.length; i++) { for (let i = 0; i < setsData.length; i++) {
const s = setsData[i]; const s = setsData[i];
await db.insert(sets).values({ await db.insert(sets).values({
id: crypto.randomUUID(), id: generateUUID(),
workoutId, workoutId,
position: i + 1, position: i + 1,
stroke: s.stroke, stroke: s.stroke,
@@ -112,7 +113,7 @@ export async function saveLap(workoutId: string, lap: LapData) {
lap.strokeCount != null ? lap.strokeCount + Math.round(lap.duration) : null; lap.strokeCount != null ? lap.strokeCount + Math.round(lap.duration) : null;
await db.insert(laps).values({ await db.insert(laps).values({
id: crypto.randomUUID(), id: generateUUID(),
workoutId, workoutId,
setPosition: lap.setPosition, setPosition: lap.setPosition,
repNumber: lap.repNumber, repNumber: lap.repNumber,
@@ -29,7 +29,8 @@ export function BuilderScreen() {
const workoutId = await save(poolLength); const workoutId = await save(poolLength);
navigation.navigate("PreSwim", { workoutId }); navigation.navigate("PreSwim", { workoutId });
} catch (e) { } catch (e) {
Alert.alert("Error", "Failed to save workout"); console.error("Failed to save workout:", e);
Alert.alert("Error", `Failed to save workout: ${e}`);
} }
}; };
+7
View File
@@ -0,0 +1,7 @@
export function generateUUID(): string {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}