Add self-hosted auth, admin API, and owner web dashboard
- Replace Clerk with self-hosted JWT auth (register/login/verify, bcrypt passwords, Gmail OTP with console fallback) - Add lib/db.ts pg pool + transaction helpers; seed script migrates legacy Clerk-era schema (drop clerk_id, enforce UUID ids and unique email) - Add owner-gated admin API: stats, users, drivers CRUD, rides - Add dashboard/ Vite React owner dashboard (login, overview, users, fleet, rides) with dev-server proxy to avoid Expo CORS middleware - Add scripts/set-owner.mjs for role management
This commit is contained in:
+6
-9
@@ -1,20 +1,17 @@
|
||||
import type { Ride } from "@/types/type";
|
||||
|
||||
export const sortRides = (rides: Ride[]): Ride[] => {
|
||||
const result = rides.sort((a, b) => {
|
||||
const dateA = new Date(`${a.created_at}T${a.ride_time}`);
|
||||
const dateB = new Date(`${b.created_at}T${b.ride_time}`);
|
||||
return dateB.getTime() - dateA.getTime();
|
||||
});
|
||||
|
||||
return result.reverse();
|
||||
return [...rides].sort(
|
||||
(a, b) =>
|
||||
new Date(b.created_at).getTime() - new Date(a.created_at).getTime(),
|
||||
);
|
||||
};
|
||||
|
||||
export function formatTime(minutes: number): string {
|
||||
const formattedMinutes = +minutes?.toFixed(0) || 0;
|
||||
const formattedMinutes = Math.round(minutes) || 0;
|
||||
|
||||
if (formattedMinutes < 60) {
|
||||
return `${minutes} min`;
|
||||
return `${formattedMinutes} min`;
|
||||
} else {
|
||||
const hours = Math.floor(formattedMinutes / 60);
|
||||
const remainingMinutes = formattedMinutes % 60;
|
||||
|
||||
Reference in New Issue
Block a user