# 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)ในอนาคน

