feat: add city/state/country to complex, new settings page with sidebar, and Biome linting

- Added city, state, and country optional fields to Complex model
- Updated onboarding to include optional location fields
- Created new settings page with sidebar navigation (Datos del Complejo, Canchas)
- Replaced ESLint with Biome for frontend and backend linting
- Added parallel dev script with concurrently
- Migrated register-routes to use direct app.route() pattern
This commit is contained in:
Jose Selesan
2026-04-10 15:36:15 -03:00
parent 77004b14b0
commit 9ee98a4cb4
129 changed files with 2929 additions and 3186 deletions

View File

@@ -1,8 +1,8 @@
import type { AppContext } from '@/types/hono'
import { getUserProfile } from '@/modules/user/services/user.service'
import { getUserProfile } from '@/modules/user/services/user.service';
import type { AppContext } from '@/types/hono';
export function getUserProfileHandler(c: AppContext) {
const authUser = c.get('authUser')
const profile = getUserProfile(authUser)
return c.json(profile)
const authUser = c.get('authUser');
const profile = getUserProfile(authUser);
return c.json(profile);
}

View File

@@ -1,21 +1,16 @@
import type { AuthUser } from '@/types/auth-user'
import type { UserProfile } from '@repo/api-contract'
import type { AuthUser } from '@/types/auth-user';
import type { UserProfile } from '@repo/api-contract';
export function getUserProfile(user: AuthUser): UserProfile {
const fullName =
(typeof user.user_metadata?.full_name === 'string' &&
user.user_metadata.full_name) ||
(typeof user.user_metadata?.full_name === 'string' && user.user_metadata.full_name) ||
(typeof user.user_metadata?.name === 'string' && user.user_metadata.name) ||
(user.email ?? 'Usuario')
(user.email ?? 'Usuario');
const role =
(typeof user.app_metadata?.role === 'string' && user.app_metadata.role) ||
'member'
const role = (typeof user.app_metadata?.role === 'string' && user.app_metadata.role) || 'member';
const avatarUrl =
(typeof user.user_metadata?.avatar_url === 'string' &&
user.user_metadata.avatar_url) ||
null
(typeof user.user_metadata?.avatar_url === 'string' && user.user_metadata.avatar_url) || null;
return {
id: user.id,
@@ -24,5 +19,5 @@ export function getUserProfile(user: AuthUser): UserProfile {
role,
avatarUrl,
createdAt: user.created_at,
}
};
}

View File

@@ -1,9 +1,9 @@
import { Hono } from 'hono'
import { requireAuth } from '@/middlewares/require-auth.middleware'
import type { AppEnv } from '@/types/hono'
import { getUserProfileHandler } from '@/modules/user/handlers/get-user-profile.handler'
import { requireAuth } from '@/middlewares/require-auth.middleware';
import { getUserProfileHandler } from '@/modules/user/handlers/get-user-profile.handler';
import type { AppEnv } from '@/types/hono';
import { Hono } from 'hono';
export const userRoutes = new Hono<AppEnv>()
export const userRoutes = new Hono<AppEnv>();
userRoutes.use('*', requireAuth)
userRoutes.get('/profile', getUserProfileHandler)
userRoutes.use('*', requireAuth);
userRoutes.get('/profile', getUserProfileHandler);