diff --git a/Dockerfile b/Dockerfile index a10c4e1..1f3c0c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,21 +3,18 @@ FROM node:22-alpine WORKDIR /app -# 👇 rompe cache (cambia este número si sigue cacheando) -ARG CACHE_BUST=1 - -# Copiamos manifests primero +# Copy manifests first for better caching COPY package*.json ./ -# 👇 DEBUG: que lo veamos en logs sí o sí -RUN echo "CACHE_BUST=$CACHE_BUST" \ - && ls -la \ - && echo "---- package-lock exists? ----" \ - && (test -f package-lock.json && echo "OK: package-lock.json found" || (echo "ERROR: package-lock.json NOT found" && exit 1)) - +# Install prod deps (works even if package-lock is missing or minimal) RUN --mount=type=cache,target=/root/.npm npm install --omit=dev + +# Copy the rest COPY . . ENV NODE_ENV=production EXPOSE 3000 -CMD ["npm","run","start"] \ No newline at end of file + +# Prisma client is generated on install, but ensure at runtime if needed: +# (Coolify/containers usually run as root in alpine; OK) +CMD ["sh","-c","node -e "console.log('API starting…')" && node src/server.js"] diff --git a/package-lock.json b/package-lock.json index 7172ddd..b15d36c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,26 @@ -rm -f package-lock.json -rm -rf node_modules -npm install -ls -lh package-lock.json -node -p "require('./package-lock.json').lockfileVersion" -git add package-lock.json -git commit -m "Regenerar package-lock.json" -git push \ No newline at end of file +{ + "name": "integrarepara-api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "integrarepara-api", + "version": "1.0.0", + "dependencies": { + "@prisma/client": "^5.22.0", + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "helmet": "^7.1.0", + "jsonwebtoken": "^9.0.2", + "morgan": "^1.10.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "prisma": "^5.22.0" + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 7bc12ea..0021cf7 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,26 @@ { "name": "integrarepara-api", "version": "1.0.0", - "private": true, "type": "module", - "main": "server.js", + "main": "src/server.js", "scripts": { - "start": "node server.js" + "start": "node src/server.js", + "dev": "node --watch src/server.js", + "prisma:generate": "prisma generate", + "prisma:migrate": "prisma migrate deploy" }, "dependencies": { + "@prisma/client": "^5.22.0", "bcryptjs": "^2.4.3", "cors": "^2.8.5", + "dotenv": "^16.4.5", "express": "^4.19.2", + "helmet": "^7.1.0", "jsonwebtoken": "^9.0.2", - "pg": "^8.11.5" + "morgan": "^1.10.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "prisma": "^5.22.0" } } \ No newline at end of file diff --git a/schema.prisma b/schema.prisma new file mode 100644 index 0000000..6dabe02 --- /dev/null +++ b/schema.prisma @@ -0,0 +1,23 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model User { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + phone String @unique + passwordHash String + isVerified Boolean @default(false) + + verificationCodeHash String? + verificationCodeExpiresAt DateTime? + + lastLoginAt DateTime? +}