Skip to content

Project Structure ​

Teldock adalah monorepo dengan tiga bagian utama: API Node.js (backend/), aplikasi React single-page (frontend/), dan situs dokumentasi VitePress (docs-site/). Halaman ini menjelaskan bagaimana kode sumber diorganisasi dan bagaimana pemeriksaan otomatis dirangkai.

Pohon direktori ​

text
Teldock/
├── backend/                         Node.js API (Express 5)
│   ├── server.js                    Process entry point
│   ├── src/
│   │   ├── app.js                   Express setup, middleware, route mounting
│   │   ├── config/
│   │   │   ├── database.js          Sequelize/MySQL connection
│   │   │   └── secrets.js           Secret resolver and boot-time validation
│   │   ├── routes/                  Endpoint definitions + middleware binding
│   │   │   ├── index.js             Mounts /auth, /files, /health
│   │   │   ├── auth.routes.js
│   │   │   ├── file.routes.js       Streaming multipart upload, file CRUD
│   │   │   ├── folder.routes.js
│   │   │   ├── user.routes.js       Telegram connect/config/status/unlink
│   │   │   ├── bot.routes.js        Multi-bot pool
│   │   │   ├── share.routes.js
│   │   │   ├── tag.routes.js
│   │   │   ├── smart-folder.routes.js
│   │   │   ├── preview.routes.js
│   │   │   ├── stats.routes.js
│   │   │   └── webdav.routes.js     Rclone-compatible WebDAV
│   │   ├── controllers/             HTTP request/response handling
│   │   ├── services/                Business logic
│   │   │   ├── telegram-storage.service.js   Chunking, streaming, Telegram I/O
│   │   │   ├── bot-pool.service.js           Round-robin bot selection
│   │   │   ├── file-upload.service.js
│   │   │   ├── file-stream.service.js
│   │   │   ├── file-query.service.js
│   │   │   ├── file-management.service.js
│   │   │   ├── version-history.service.js
│   │   │   ├── jwt.service.js
│   │   │   ├── realtime-sync.service.js      Socket.IO real-time sync
│   │   │   ├── file-service-error.js
│   │   │   └── preview/
│   │   │       ├── image.service.js
│   │   │       └── video.service.js
│   │   ├── models/                  Sequelize models + associations
│   │   │   ├── index.js
│   │   │   ├── User.js
│   │   │   ├── BotToken.js
│   │   │   ├── File.js
│   │   │   ├── FilePart.js
│   │   │   ├── FileVersion.js
│   │   │   ├── FileTag.js
│   │   │   ├── Folder.js
│   │   │   ├── SharedLink.js
│   │   │   ├── SmartFolder.js
│   │   │   ├── Tag.js
│   │   │   └── TelegramConfig.js
│   │   ├── middleware/              Auth, validation, file access, upload
│   │   ├── validation/              Zod schemas (auth, file, telegram)
│   │   └── utils/                   Shared helpers (currently empty)
│   ├── scripts/                     Migration and diagnostic scripts
│   └── tests/                       node:test unit and integration tests
├── frontend/                        React 18 + Vite SPA
│   ├── index.html
│   ├── vite.config.js
│   ├── tailwind.config.js
│   ├── postcss.config.js
│   └── src/
│       ├── main.jsx                 App bootstrap + auth initialization
│       ├── App.jsx                  Router configuration
│       ├── index.css
│       ├── pages/                   Route-level views
│       │   ├── Landing.jsx
│       │   ├── Login.jsx
│       │   ├── Register.jsx
│       │   ├── Dashboard.jsx
│       │   ├── MobileDashboard.jsx
│       │   ├── Settings.jsx
│       │   ├── Shares.jsx
│       │   └── Stats.jsx
│       ├── components/              Reusable UI
│       │   ├── Layout.jsx
│       │   ├── FileViewer.jsx
│       │   ├── TagPicker.jsx
│       │   ├── TransferCenter.jsx
│       │   └── VersionHistory.jsx
│       ├── services/
│       │   └── api.js               Axios client + interceptors
│       └── store/
│           ├── auth-store.js        Zustand auth state
│           ├── theme-store.js       Dark/light theme state
│           └── transfer-context.jsx Upload/download transfer state
├── docs-site/                       VitePress documentation (this site)
├── .github/workflows/
│   ├── ci.yml                       Lint, test, and frontend build
│   └── deploy-docs.yml              Build and deploy the docs site
└── README.md

Layer backend ​

Backend mengikuti arsitektur berlapis yang ketat:

text
routes → controllers → services → models
LayerDirektoriTanggung jawab
Routessrc/routesMendeklarasikan path URL, memasang middleware autentikasi dan validasi.
Controllerssrc/controllersMenangani siklus request/response HTTP dan menerjemahkan error service menjadi kode status.
Servicessrc/servicesMenyimpan logika bisnis: chunking, streaming, pemilihan bot, preview, riwayat versi.
Modelssrc/modelsMendefinisikan tabel, asosiasi, dan helper persistensi melalui Sequelize.
Middlewaresrc/middlewareConcern lintas potong: verifikasi JWT, validasi Zod, tanda tangan file-access, parsing upload.
Validationsrc/validationSkema Zod yang mendeskripsikan request body yang valid.
Configsrc/configKoneksi database dan resolusi secret terpusat.

Folder frontend ​

FolderPeran
src/pagesLayar tingkat route yang dirender oleh konfigurasi React Router di App.jsx.
src/componentsKomponen UI yang dapat dipakai ulang seperti layout shell, file viewer, tag picker, dan transfer center.
src/servicesKlien API Axios beserta interceptor request/response-nya.
src/storeStore Zustand untuk state auth, theme, dan transfer.

Skrip npm backend ​

Jalankan dari direktori backend.

SkripPerintahFungsi
startnode server.jsMenjalankan API pada environment saat ini.
devnodemon server.jsMenjalankan dengan auto-reload untuk pengembangan.
migratenode scripts/migrate.jsMembuat/memperbarui seluruh tabel database.
migrate:chunkednode scripts/migrate-chunked-storage.jsMenambah kolom chunked/encrypted.
migrate:drop-quotanode scripts/migrate-drop-quota.jsMenghapus kuota tetap lama.
migrate:widen-share-tokennode scripts/migrate-widen-share-token.jsMelebarkan kolom share token.
migrate:version-snapshotsnode scripts/migrate-version-snapshots.jsMenambah part snapshot versi.
migrate:tags-favoritesnode scripts/migrate-tags-favorites.jsMenambah tag, favorit, smart folder.
testnode --test tests/*.test.jsMenjalankan suite unit/integration test.
test-authnode tests/test-auth.jsMenjalankan skrip tes auth lama.
test-dbnode scripts/test-database.jsMemverifikasi konektivitas dan skema database.
linteslint "src/**/*.js" "tests/**/*.js" "scripts/**/*.js" "*.js"Analisis statis.
formatprettier --write ...Memformat source, test, dan skrip.

Skrip npm frontend ​

Jalankan dari direktori frontend.

SkripPerintahFungsi
devvite --host 0.0.0.0 --port 3000Menjalankan dev server pada port 3000.
buildvite buildMenghasilkan bundle produksi di dist/.
previewvite previewMenyajikan bundle hasil build secara lokal.

Continuous integration ​

.github/workflows/ci.yml berjalan pada setiap push ke main, pada setiap pull request, dan pada dispatch manual. Workflow ini memiliki dua job independen:

JobLangkah
backendCheck out, menyiapkan Node.js 22, npm ci --ignore-scripts, npm run lint, npm test.
frontendCheck out, menyiapkan Node.js 22, npm ci --ignore-scripts, npm run build.

TIP

CI berjalan pada setiap push ke main dan setiap pull request. Pastikan npm run lint dan npm test hijau di backend, serta npm run build hijau di frontend, sebelum membuka PR.

Situs dokumentasi dibangun dan dideploy oleh workflow terpisah, .github/workflows/deploy-docs.yml. Workflow ini dipicu hanya saat ada perubahan di bawah docs-site/ (atau saat dijalankan manual), menjalankan npm run docs:build di docs-site, lalu mempublikasikan hasilnya ke GitHub Pages.

Halaman terkait ​

Released under the MIT License.