package store import ( "crypto/sha256" "encoding/hex" "errors" "fmt" "io" "net/http" "os" "path/filepath" "regexp" "sort" "strings" "time" ) // --------------------------------------------------------------------------- // Gerenciador de arquivos: árvore de pastas + arquivos com associação opcional // a uma nota. Persistência: folders.json, files.json e blobs em files/.. // --------------------------------------------------------------------------- // MaxFileBytes limita o tamanho de cada anexo (64 MiB). const MaxFileBytes = 64 << 20 // Folder é um nó da árvore de pastas (parent "" = raiz). type Folder struct { ID string `json:"id"` Name string `json:"name"` Parent string `json:"parent"` CreatedAt time.Time `json:"created_at"` } // FileMeta descreve um arquivo anexado ou avulso. type FileMeta struct { ID string `json:"id"` Name string `json:"name"` Folder string `json:"folder"` // "" = raiz da árvore de arquivos Note string `json:"note"` // "" = avulso (sem nota) Size int64 `json:"size"` MIME string `json:"mime"` SHA256 string `json:"sha256"` CreatedAt time.Time `json:"created_at"` } // FileNode é a visão de API (meta + URL para /