PLANserver v1

Node.js backend for FRIDAYplan prototype.

Stack

  • JavaScript ESM
  • Express
  • mysql2
  • Socket.IO
  • LDAP bind (ldapts)
  • JWT access token

Run

  1. Copy .env.example to .env and adjust values.
  2. Install dependencies: npm install.
  3. Start: npm start.

Default ports:

  • HTTP API + static app: 16001
  • Socket.IO: 16002

Structure

  • src/config - environment and domain constants
  • src/infra - db, ldap, jwt, socket adapters
  • src/repositories - SQL access layer
  • src/services - domain logic and transactions
  • src/controllers - HTTP handlers
  • src/routes - route registration
  • src/middleware - auth/admin/errors
  • public/auth-gate.js - login modal overlay script

Auth

  • POST /auth/login -> LDAP bind + role resolve via app_settings.roles_map_json.
  • JWT token stored client-side in sessionStorage by auth-gate.js.
  • HTTP and Socket.IO both use same bearer token.

User Search API

  • GET /users/search?q=<query>&purpose=<assignment|hearing>&limit=<1..20>
  • Minimum query length is 2 symbols.
  • For purpose=assignment, users with resolved role L1 are excluded from result.

L6 Group Task

  • New event type: group_task (L6/L6_IT only).
  • Create endpoint: POST /events/group-task (alias: POST /events/group_task).
  • Update/read/cancel/complete use typed routes:
    • GET /events/group_task/{id}
    • PATCH /events/group_task/{id}
    • POST /events/group_task/{id}/complete
    • POST /events/group_task/{id}/cancel
  • Group members are validated as strict L6 on backend.
  • group_task appears only in left panel (Мои задачи), with global complete/cancel for all participants and edit only by initiator.
  • Realtime events:
    • group_task_created
    • group_task_updated
    • group_task_completed
    • group_task_canceled

Worker

  • Interval from WORKER_INTERVAL_MS (default 60000).
  • Uses MariaDB advisory lock fridayplan.worker.autocomplete.
  • Auto-completes overdue vcs and meeting events.
Description
Клиент-серверный планировщик для экосистемы Псковского областного суда
Readme Apache-2.0 862 KiB
Languages
JavaScript 73.5%
HTML 16.3%
CSS 9%
PowerShell 1.2%