Files
simplenote-web/folder-structure.md
Bulma 90e4dd0807 feat(architecture): add complete technical architecture for SimpleNote
- ARCHITECTURE.md: main architecture document
- api-spec.yaml: full OpenAPI 3.0 spec
- folder-structure.md: detailed folder layout
- data-format.md: JSON schemas for .meta.json, .library.json, .tag-index.json
- env-template.md: environment variables documentation
- cli-protocol.md: CLI-to-API communication protocol
2026-03-28 03:18:25 +00:00

171 lines
5.7 KiB
Markdown

# SimpleNote - Estructura de Carpetas
## Estructura General del Repositorio
```
simplenote-web/
├── src/
│ ├── index.js # Entry point (bind port, listen)
│ ├── app.js # Express app setup, middleware, routes
│ ├── config/
│ │ └── index.js # Env vars loader y defaults
│ ├── routes/
│ │ ├── index.js # Router principal (mount /api/v1/*)
│ │ ├── documents.js # /documents routes
│ │ ├── libraries.js # /libraries routes
│ │ ├── tags.js # /tags routes
│ │ └── auth.js # /auth routes
│ ├── services/
│ │ ├── documentService.js # Lógica de documentos
│ │ ├── libraryService.js # Lógica de librerías
│ │ └── tagService.js # Lógica de tags e indexación
│ ├── middleware/
│ │ ├── auth.js # Middleware de autenticación Bearer
│ │ └── errorHandler.js # Handler global de errores
│ ├── utils/
│ │ ├── markdown.js # Parseo y serialización de Markdown
│ │ ├── fsHelper.js # Helpers de filesystem (safe paths, etc)
│ │ ├── uuid.js # Wrapper de uuid/v4
│ │ └── errors.js # Clases de errores custom (NotFound, etc)
│ └── indexers/
│ └── tagIndexer.js # Rebuild y query del .tag-index.json
├── data/ # Raíz de documentos (DATA_ROOT)
│ ├── .tag-index.json # Índice global de tags
│ ├── .auth-tokens.json # Tokens de API válidos
│ └── libraries/
│ └── {uuid}/
│ ├── .library.json
│ ├── documents/
│ │ └── {uuid}/
│ │ ├── index.md
│ │ └── .meta.json
│ └── sub-libraries/
│ └── {child-uuid}/...
├── tests/
│ ├── unit/
│ │ ├── services/
│ │ │ ├── documentService.test.js
│ │ │ ├── libraryService.test.js
│ │ │ └── tagService.test.js
│ │ └── utils/
│ │ └── markdown.test.js
│ └── integration/
│ └── api.test.js
├── scripts/
│ └── init-data.js # Script de inicialización (crea default lib)
├── package.json
├── .env.example
└── README.md
simplenote-cli/
├── src/
│ ├── index.js # Entry point (Commander program)
│ ├── api/
│ │ └── client.js # SimpleNoteClient (axios-based)
│ ├── commands/
│ │ ├── index.js # Registra todos los subcommands
│ │ ├── doc.js # simplenote doc <subcmd>
│ │ ├── lib.js # simplenote lib <subcmd>
│ │ └── tag.js # simplenote tag <subcmd>
│ └── config/
│ ├── loader.js # Carga ~/.config/simplenote/config.json
│ └── errors.js # Errores CLI custom
├── package.json
└── README.md
```
## Estructura de Datos en Disco (DATA_ROOT)
```
data/ # DATA_ROOT (default: ./data)
├── .tag-index.json # Tag index global
├── .auth-tokens.json # Auth tokens
└── libraries/
└── {library-uuid}/
├── .library.json
├── documents/
│ └── {doc-uuid}/
│ ├── index.md # Contenido Markdown
│ └── .meta.json # Metadata (tags, timestamps)
└── sub-libraries/
└── {child-uuid}/
├── .library.json
└── documents/
└── ... (recursivo)
```
## Archivos de Metadata
### `.library.json` (por librería)
```json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Backend Requirements",
"parentId": null,
"path": "libraries/550e8400",
"createdAt": "2026-03-28T09:00:00Z",
"updatedAt": "2026-03-28T09:00:00Z"
}
```
### `.meta.json` (por documento)
```json
{
"id": "550e8401-e29b-41d4-a716-446655440001",
"title": "API Authentication",
"tags": ["backend", "api", "auth"],
"type": "requirement",
"status": "draft",
"priority": "high",
"libraryId": "550e8400-e29b-41d4-a716-446655440000",
"createdBy": "agent-001",
"createdAt": "2026-03-28T10:00:00Z",
"updatedAt": "2026-03-28T10:00:00Z"
}
```
### `index.md` (contenido)
```markdown
---
id: REQ-001
title: API Authentication
type: requirement
priority: high
status: draft
tags: [backend, api, auth]
createdBy: agent-001
createdAt: 2026-03-28
---
# API Authentication
## Descripción
El sistema debe soportar autenticación via tokens Bearer.
## Criterios de Aceptación
- [ ] Endpoint POST /api/auth/token
- [ ] Middleware valida Bearer token
- [ ] Retorna 401 si token inválido
```
## Archivos de Configuración Local (CLI)
```
~/.config/simplenote/
└── config.json # Config CLI local
{
"apiUrl": "http://localhost:3000/api/v1",
"token": "snk_xxxxx",
"activeLibrary": "default"
}
```
## Archivos de Configuración del Servidor
```
simplenote-web/
├── .env.example # Template de variables de entorno
├── .env # No commitear (contiene secrets)
└── .gitignore # Ignora .env, data/, node_modules/
```