Monorepo para una web movil (responsive) con:
frontend/: React + TypeScript (Vite)backend/: Java Spring Boot + H2 (sin Docker)docs/: contrato de API y notasshared/: tipos compartidos opcionales
MVP actual orientado a guardar y visualizar:
- texto
- links
- media local (imagenes y video por path/storage)
Hackaton_PISITO/
|- backend/
|- frontend/
|- docs/
|- shared/
|- .gitignore
|- .editorconfig
`- README.md
- Node.js 20+ (
node -v) - npm 10+ (
npm -v) - Java 21+ (
java -version) - Maven 3.9+ (
mvn -v)
Para ejecutar front + back en local:
Terminal 1 (backend):
cd C:\Users\adrir\OneDrive\Desktop\proyectosGit\Hackaton_PISITO\backend
mvn spring-boot:runTerminal 2 (frontend):
cd C:\Users\adrir\OneDrive\Desktop\proyectosGit\Hackaton_PISITO\frontend
npm install
npm run devAbrir:
- Front:
http://localhost:5173 - Back:
http://localhost:8080 - Health check:
http://localhost:8080/api/health - H2 console:
http://localhost:8080/h2-console
Modelo backend:
Entry(titulo + lista de recursos)Resource(clase padre)- Herencia de recursos:
TextResource,LinkResource,MediaResource
Backend expone:
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/mePUT /api/auth/me/usernamePUT /api/auth/me/passwordGET /api/entriesGET /api/entries/{entryId}POST /api/entries(titulo y opcionalresources[])POST /api/entries/{entryId}/resources/textPOST /api/entries/{entryId}/resources/linkPOST /api/entries/{entryId}/resources/mediaDELETE /api/entries/{entryId}/resources/{resourceId}DELETE /api/entries/{entryId}
Contrato detallado en docs/api.md.
Nota de auth:
POST /api/auth/registeryPOST /api/auth/loginson publicos.- El resto de endpoints
/api/**requiereAuthorization: Bearer <jwt>. - Las
entries/resourcesse filtran por el usuario del token.
- Acordar endpoints en
docs/api.md. - Persona A trabaja en
backend/. - Persona B trabaja en
frontend/. - Front consume
/api/*del backend (proxy de Vite ya configurado).
Backend tests:
cd backend
mvn testFrontend build:
cd frontend
npm run build- No se usa Docker para mantener setup rapido.
- Base de datos: H2 en memoria (ideal para hackaton/demo).
- Si mas adelante migrais a Postgres/MySQL o Supabase, se cambia en
backend/src/main/resources/application.ymly en la persistencia deMediaResource.
- Crea un archivo
.enven la raiz tomando como base.env.example. - Rellena
DB_URL,DB_USERNAME,DB_PASSWORDcon tus credenciales. - Para Supabase usa
SQL_INIT_MODE=never(evita ejecutardata.sqllocal en remoto). - Arranca backend y frontend como siempre.
PowerShell (ejemplo rapido):
# desde la raiz del repo
$env:DB_URL="jdbc:postgresql://aws-1-eu-west-1.pooler.supabase.com:6543/postgres?sslmode=require"
$env:DB_USERNAME="postgres.<tu_project_ref>"
$env:DB_PASSWORD="<tu_password>"
$env:DB_DRIVER_CLASS="org.postgresql.Driver"
$env:SQL_INIT_MODE="never"
$env:H2_CONSOLE_ENABLED="false"
$env:APP_JWT_SECRET="<base64_secret>"
cd backend
mvn spring-boot:run