# EDM Backend API Enterprise Document Management (EDM) ส่วน backend # ส่วนประกอบ - Node.js (TypeScript) และ Express เป็น Framework สำหรับการพัฒนาหลัก - pnpm เป็น package manager - Web API Doc สร้าง Open API Spec ด้วย tsoa - Library Document ใช้ TypeDoc - Minio สำหรับเก็บไฟล์ มีการใช้ presign url สำหรับ upload/download ทำให้รองรับโหลดได้มากตามความสามารถของ MiniO - Keycloak ทำ Single Sign On เพื่อ integrate กับระบบอื่น - Elasticsearch สำหรับการค้นหาเอกสารภาษาไทย - Attachment Processor สำหรับดึงข้อความเพื่อทำ Index สำหรับ Elasticsearch - RabbitMQ ใช้ Bucket Notification ของ MiniO ส่งแจ้งเตือนเมื่อมีเอกสารใหม่จะต้องทำ Index ทำงานเป็น คิวเพื่อทำให้รับโหลดเอกสารได้มากยิ่งขึ้น เอกสารที่ทำผ่าน MiniO ก็จะถูกทำ Index โดยที่ Application ไม่ต้องเขียนการจัดการพิเศษ # การเรียกใช้ผ่าน Service Account จำเป็นต้องตั้งค่า Keycloak เพื่อให้สามารถขอ Token โดยใช้ Secret Key ที่ได้รับ ผ่านทาง `https://edm-id.frappet.synology.me/realms/EDM/protocol/openid-connect/token` ดังนี้ ![image](https://github.com/Frappet/EDM/assets/61303214/4d2529eb-fbdf-4dbf-8cfc-8ae40108e5bb) # สิทธิในจัดการ การจัดการสามารถตั้งค่าได้โดยใช้ ENV ที่มีชื่อว่า MANAGEMENT_ROLE ให้ตรงกับที่ตั้งค่าใน Keycloak อีกที ## Note - ELK (Elasticsearch+Kibana) ใช้แบบ unsecure อยู่หลัง firewall น่าจะเพียงพอ อาจจะ[ปรับเพิ่มเรื่องความปลอดภัย](https://vorapoap.medium.com/%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-3-%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-security-%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B8%81%E0%B8%B1%E0%B8%9A-elasticsearch-aa26a71b87ff)ในอนาคน