Skip to content

Feature/markdown editor#66

Open
Arekkazu wants to merge 8 commits into
devfrom
feature/markdown-editor
Open

Feature/markdown editor#66
Arekkazu wants to merge 8 commits into
devfrom
feature/markdown-editor

Conversation

@Arekkazu
Copy link
Copy Markdown
Collaborator

@Arekkazu Arekkazu commented Jan 15, 2026

Esta PR implementa un sistema completo de editor de Markdown para proyectos del semillero Devurity, permitiendo a los usuarios autenticados crear y editar documentación de proyectos de manera segura.

✨ Características principales

1. API de Editor de Markdown (/api/auth/projects/editor/[projectid])

  • ✅ Recibe contenido en formato Markdown desde el cliente
  • ✅ Valida que el usuario esté autenticado y sea propietario del proyecto
  • ✅ Crea/actualiza archivos .md en Supabase Storage
  • ✅ Normaliza nombres de archivos y carpetas (espacios, caracteres especiales)
  • ✅ Actualiza timestamp updated_at del proyecto en la BD

2. Upload de archivos Markdown (/api/auth/projects/editor/[projectid]/upload)

  • ✅ Permite subir archivos .md desde el sistema local
  • ✅ Validación de extensión (solo .md)
  • ✅ Validación de tamaño máximo (1MB)
  • ✅ Verificación de encoding UTF-8
  • ✅ Protección contra null bytes
  • ✅ Almacenamiento organizado por proyecto en Supabase

3. Middleware de autenticación (lib/auth/require-auth.ts)

  • ✅ Función helper requireAuth() para verificar tokens JWT
  • ✅ Extrae y valida el token de las cookies
  • ✅ Devuelve información del usuario autenticado

4. Utilidades

  • ✅ Función normalizeSpace() para limpiar nombres de archivos
  • ✅ Integración con Supabase Admin Client
  • ✅ Queries optimizados con Prisma para validar ownership de proyectos

🔐 Seguridad implementada

  • Autenticación requerida mediante JWT tokens
  • Validación de ownership del proyecto (solo el dueño puede editar)
  • Sanitización de nombres de archivos
  • Validación de tipos de archivo y encoding
  • Protección contra null bytes y archivos binarios
  • Límite de tamaño para prevenir ataques DoS

📁 Archivos modificados/creados

Nuevos archivos:

  • app/api/auth/projects/editor/[projectid]/route.ts
  • app/api/auth/projects/editor/[projectid]/upload/route.ts
  • lib/auth/require-auth.ts
  • lib/utils/normalize.space.ts

Archivos modificados:

  • .env.example - Variables de Supabase agregadas
  • package.json - Dependencias actualizadas
  • prisma/devurity-2025-12-08-new.sql - Schema actualizado
  • lib/supabase/supabase.ts - Cliente de Supabase configurado

🧪 Testing

  • ✅ Probado con usuarios autenticados y no autenticados
  • ✅ Validación de ownership de proyectos
  • ✅ Upload de archivos .md exitoso
  • ✅ Actualización de archivos existentes (upsert)
  • ✅ Rechazo de archivos inválidos/muy grandes

📝 Commits principales

  1. 6e75896 - Implementación inicial: ruta de editor con query a BD
  2. d9a8d0f - Sistema de upload con validaciones de seguridad
  3. 78df688 - Finalización: verificación BD, autenticación y actualización de timestamps

🚀 Cómo probar

  1. Autenticarse en la aplicación
  2. Acceder a un proyecto del cual seas propietario
  3. Enviar contenido Markdown via POST a /api/auth/projects/editor/[projectid]
  4. O subir un archivo .md a /api/auth/projects/editor/[projectid]/upload
  5. Verificar en Supabase Storage: projects/{nombre-proyecto}/{nombre-proyecto}.md

📌 Notas adicionales

  • Los archivos se organizan en Supabase bajo: devurity/projects/{proyecto}/{archivo}.md
  • Los nombres se normalizan automáticamente (lowercase, sin espacios extras)
  • El sistema usa upsert: true para sobrescribir contenido existente
  • Se actualiza updated_at en cada modificación del proyecto

Alt text

Summary by CodeRabbit

Notas de la versión

  • Nuevas Características

    • Capacidad para guardar y cargar contenido de proyectos de forma segura.
    • Validación de archivos durante las cargas (tamaño máximo, tipo de archivo).
    • Autenticación mejorada con manejo seguro de sesiones.
    • Actualización automática de metadatos del proyecto tras cambios.
  • Chores

    • Actualización de dependencias del proyecto.
    • Adición de nuevas herramientas de almacenamiento en la plataforma.

…e y es actualizado en caos que existe,

igualmente se creo un query del slug para evitar creaciones de proyectos que no existen en la bd

TODO: subida de archivos markdown
Copilot AI review requested due to automatic review settings January 15, 2026 04:14
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a complete Markdown editor system for Devurity projects, enabling authenticated users to create and edit project documentation securely through API endpoints with Supabase Storage integration.

Changes:

  • Added two API routes for Markdown file management: direct content upload and file upload
  • Implemented authentication middleware and Supabase client configuration
  • Added utility function for filename normalization and user management endpoints
  • Included database schema dump and environment variable configuration

Reviewed changes

Copilot reviewed 9 out of 13 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
tsconfig.json Changed JSX transformation from react-jsx to preserve
prisma/devurity-2025-12-08-new.sql Complete database schema dump with sample data
package.json Added @supabase/supabase-js dependency
lib/utils/normalize.space.ts Utility to normalize filenames by replacing spaces with underscores
lib/supabase/supabase.ts Supabase client and admin client configuration
lib/auth/require-auth.ts Authentication helper to validate JWT tokens
app/api/auth/projects/editor/[projectid]/route.ts API endpoint for uploading Markdown content
app/api/auth/projects/editor/[projectid]/upload/route.ts API endpoint for uploading Markdown files
app/api/auth/login/route.ts Added logger.info() call for token logging
app/api/auth/csrf-token/users/route.ts New endpoint for user pagination and retrieval
app/api/auth/csrf-token/users/[id]/route.ts New endpoint for user approval/rejection operations
.env.example Added Supabase environment variable examples

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .env.example Outdated
Comment thread app/api/auth/login/route.ts Outdated
Comment thread app/api/auth/projects/editor/[projectid]/route.ts Outdated
Comment thread app/api/auth/projects/editor/[projectid]/upload/route.ts
Comment thread app/api/auth/projects/editor/[projectid]/route.ts
Comment thread app/api/auth/projects/editor/[projectid]/route.ts
Comment thread app/api/auth/projects/editor/[projectid]/upload/route.ts Outdated
Comment thread app/api/auth/projects/editor/[projectid]/upload/route.ts
Comment thread app/api/auth/projects/editor/[projectid]/route.ts
Copilot AI review requested due to automatic review settings January 15, 2026 04:18

This comment was marked as outdated.

@trbureiyan trbureiyan added the enhancement New feature or request label Feb 1, 2026
@trbureiyan trbureiyan self-requested a review February 1, 2026 02:53
Repository owner deleted a comment from vercel Bot Feb 1, 2026
@trbureiyan

This comment was marked as resolved.

@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 4, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
devurity-web Error Error Mar 30, 2026 3:38am

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
trbureiyan

This comment was marked as resolved.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…principal

bcryptjs para manejo de contraseñas y un script para evitar la ejecución de scripts maliciosos al instalar. Y subida de Next.js a la última versión.
Repository owner deleted a comment from coderabbitai Bot Apr 8, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 8, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 8, 2026

📝 Walkthrough

Walkthrough

Se agregan nuevas capacidades de autenticación y carga de archivos. Se introduce una función de autenticación requerida, se inicializa un cliente de Supabase, se crean dos nuevos endpoints API para proyectos que permiten editar y cargar contenido de Markdown, se agrega logging de autenticación y una utilidad de normalización.

Changes

Cohort / File(s) Summary
Autenticación
lib/auth/require-auth.ts, app/api/auth/login/route.ts
Se implementa la función requireAuth que valida tokens desde cookies y se agrega logging en el endpoint de login para registrar autenticaciones exitosas.
Integración Supabase
lib/supabase/supabase.ts
Se crean dos clientes Supabase: uno anónimo para lectura y otro administrativo con token de servicio para operaciones privilegiadas, con persistencia de sesión deshabilitada.
API de Proyectos
app/api/auth/projects/editor/[projectid]/route.ts, app/api/auth/projects/editor/[projectid]/upload/route.ts
Se agregan dos endpoints POST: uno para editar contenido de proyectos y otro especializado para cargar archivos .md con validación de tamaño (máx. 1MB), verificación de extensión y decodificación UTF-8.
Utilidades y Dependencias
_deprecated/lib/utils/normalize.space.ts, package.json
Se agrega función normalizeSpace para normalizar espacios en blanco y se actualiza next a ^15.5.14, se incorpora @supabase/supabase-js ^2.90.1 y se define script secure-install.

Sequence Diagram(s)

sequenceDiagram
    actor Client as Cliente
    participant API as API POST<br/>/editor/[id]
    participant Auth as requireAuth
    participant DB as Base de Datos<br/>(Prisma)
    participant Storage as Supabase<br/>Storage
    
    Client->>API: POST /editor/[projectid]<br/>(formData con contenido)
    API->>Auth: requireAuth(request)
    Auth-->>API: { userId } | null
    alt No autenticado
        API-->>Client: 401 Unauthorized
    else Autenticado
        API->>DB: findUnique(project)<br/>+ user_projects
        DB-->>API: project | null
        alt No encontrado
            API-->>Client: 404 Project not found
        else Encontrado
            API->>Storage: Upload content<br/>bucket: devurity
            Storage-->>API: Upload result
            API->>DB: Update project<br/>updated_at
            DB-->>API: Success
            API-->>Client: 200 JSON result
        end
    end
Loading
sequenceDiagram
    actor Client as Cliente
    participant API as API POST<br/>/upload/[id]
    participant Auth as requireAuth
    participant Validate as Validador<br/>de Archivo
    participant DB as Base de Datos<br/>(Prisma)
    participant Storage as Supabase<br/>Storage
    
    Client->>API: POST /upload/[projectid]<br/>(FormData con archivo .md)
    API->>Auth: requireAuth(request)
    Auth-->>API: { userId } | null
    alt No autenticado
        API-->>Client: 401 Unauthorized
    else Autenticado
        API->>DB: Verificar propiedad<br/>del proyecto
        DB-->>API: proyecto válido | null
        alt Proyecto no válido
            API-->>Client: 404 Project not found
        else Válido
            API->>Validate: Validar extensión,<br/>tamaño < 1MB
            alt Validación fallida
                Validate-->>API: Error
                API-->>Client: 400 Bad Request
            else Válido
                Validate->>Validate: Decodificar UTF-8<br/>Rechazar null bytes
                alt Decodificación fallida
                    Validate-->>API: Error
                    API-->>Client: 400 Invalid encoding
                else Éxito
                    Validate-->>API: Contenido decodificado
                    API->>Storage: Upload text<br/>bucket: devurity
                    Storage-->>API: Upload result
                    API->>DB: Update project<br/>updated_at
                    DB-->>API: Success
                    API-->>Client: 200 Success response
                end
            end
        end
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 Con saltos de alegría, un conejo corre,
Nuevos proyectos en Supabase se almacenan,
Archivos validados con cuidado de conejera,
Autenticación firme guarda cada entrada,
¡Código limpio brilla bajo la luna! 🌙✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive El título describe de manera general la característica implementada (editor de markdown), pero es muy vago y genérico sin especificar el aspecto principal del cambio. Considerar un título más específico que capture el cambio principal, como 'Add Markdown editor API endpoints and authentication' o 'Implement Markdown file editor with Supabase integration'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/markdown-editor

Comment @coderabbitai help to get the list of available commands and usage tips.

coderabbitai[bot]

This comment was marked as spam.

Repository owner deleted a comment from vercel Bot Apr 8, 2026
Repository owner deleted a comment from coderabbitai Bot Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DVW-BUILD-B01] Fix build failures en feature/markdown-editor — PR #66 [DVW-EDIT-H01] Editor Markdown integrado al CMS y módulo de proyectos (0/2)

4 participants