589 lines
56 KiB
Plaintext
589 lines
56 KiB
Plaintext
From: <Saved by Blink>
|
||
Snapshot-Content-Location: https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&pli=1
|
||
Subject: =?utf-8?Q?LCBP3-DMS=20Backend=20Documentation=20(=E0=B8=89=E0=B8=9A=E0=B8?=
|
||
=?utf-8?Q?=B1=E0=B8=9A=E0=B8=AA=E0=B8=A1=E0=B8=9A=E0=B8=B9=E0=B8=A3=E0=B8?=
|
||
=?utf-8?Q?=93=E0=B9=8C)?=
|
||
Date: Thu, 16 Oct 2025 23:04:32 +0700
|
||
MIME-Version: 1.0
|
||
Content-Type: multipart/related;
|
||
type="text/html";
|
||
boundary="----MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----"
|
||
|
||
|
||
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
|
||
Content-Type: text/html
|
||
Content-ID: <frame-24AE4BF3D668AA12D0DFFD18451FBF94@mhtml.blink>
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&pli=1
|
||
|
||
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="cid:css-7a31172c-c16d-4379-a847-9072f51a3b81@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-747ecb2f-f82b-48b3-b9c3-4dd7b63ebcea@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-a43a30ce-0932-481b-8734-60b84ca204e0@mhtml.blink" /><title>LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon-2023q4.ico"><meta property="og:title" content="LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)"><meta property="og:type" content="article"><meta property="og:site_name" content="Google Docs"><meta property="og:url" content="https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&pli=1&usp=embed_facebook"><meta property="og:description" content="LCBP3-DMS: Backend Documentation (ฉบับสมบูรณ์) เอกสารนี้รวบรวมรายละเอียดทั้งหมดของส่วน Backend สำหรับระบบ LCBP3 Document Management System ซึ่งพัฒนาด้วย NestJS Framework ประกอบด้วยขั้นตอนการติดตั้ง, สถาปัตยกรรม, และซอร์สโค้ดทั้งหมดของโปรเจกต์ 1. ข้อกำหนดเบื้องต้น (Prerequisites) ก่อนเริ่มการติดตั..."><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=0"><meta name="referrer" content="strict-origin-when-cross-origin"></head><body><div><div class="docs-ml-promotion docs-ml-promotion-off-screen" role="alertdialog" aria-labelledby="docs-ml-promotion-aria-label" aria-hidden="true"><div id="docs-ml-promotion-aria-label" style="display:none;">Alert message displayed.</div><div class="docs-ml-promotion-content"><div class="docs-ml-promotion-header"><span class="docs-ml-promotion-app-icon-container" aria-hidden="true"><div class="docs-ml-icon docs-ml-promotion-app-icon"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 36 36"><path fill="none" d="M0 0h36v36H0z"></path><path fill="#fff" d="M10.9 18.4h14.2V21H10.9zM10.9 22.9h10.5v2.6H10.9z"></path><path fill="#1967d2" d="M21.8 9.8l4.5.8 3.7-.8-8.2-8.3-1.2 3.9z"></path><path fill="#fff" d="M10.9 13.9h14.2v2.6H10.9z"></path><path d="M21.8 9.8V1.5H8.2C7 1.5 6 2.5 6 3.8v28.5c0 1.2 1 2.2 2.2 2.2h19.5c1.2 0 2.2-1 2.2-2.2V9.8h-8.1zM21 25.1h-9.8v-1.9H21v1.9zm3.8-4.5H11.2v-1.9h13.5v1.9zm0-4.5H11.2v-1.9h13.5v1.9z" fill="#4285f4"></path></svg></div></span><span class="docs-ml-promotion-text"><div class="docs-ml-promotion-text-heading">Edit with the Docs app</div><div class="docs-ml-promotion-text-body">Make tweaks, leave comments, and share with others to edit at the same time.</div></span></div><div class="docs-ml-promotion-action-row"><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-no-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-no-button">NO THANKS</span></span></span><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-yes-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-yes-button">USE THE APP</span></span></span></div></div></div></div><div id="docs-ml-header-id" class="docs-ml-header"><span class="docs-ml-header-item docs-ml-header-drive-link"><div id="docs-ml-header-drive-link-aria-label" style="display:none;">Go to Drive</div><a href="https://drive.google.com/u/0?usp=docs_web" aria-labelledby="docs-ml-header-drive-link-aria-label" role="button"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon docs-ml-arrow-back-dir"><div class="docs-ml-img-container docs-ml-img docs-ml-arrow-back-icon"></div></div></div></a></span><span class="docs-ml-header-item docs-ml-header-document-title"><div class="docs-ml-header-document-title-text">LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)</div></span><div id="docs-ml-header-edit-button-aria-label" style="display:none;">Edit</div><span class="docs-ml-header-item docs-ml-header-edit-button" aria-labelledby="docs-ml-header-edit-button-aria-label" role="button" tabindex="0"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon"><div class="docs-ml-img-container docs-ml-img docs-ml-edit-icon"></div></div></div></span></div><div class="app-container"><div class="doc-container"><div class="doc"><div class="doc-content" style="background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt"><h1 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:24pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:24pt;font-family:"Arial";font-style:normal">LCBP3-DMS: Backend Documentation (ฉบับสมบูรณ์)</span></h1><p style="padding-top:0pt;margin:0;color:#000000;padding-left:0;font-size:11pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เอกสารนี้รวบรวมรายละเอียดทั้งหมดของส่วน Backend สำหรับระบบ LCBP3 Document Management System ซึ่งพัฒนาด้วย NestJS Framework ประกอบด้วยขั้นตอนการติดตั้ง, สถาปัตยกรรม, และซอร์สโค้ดทั้งหมดของโปรเจกต์</span></p><h2 style="padding-top:0pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">1. ข้อกำหนดเบื้องต้น (Prerequisites)</span></h2><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ก่อนเริ่มการติดตั้งและพัฒนา คุณจะต้องมีเครื่องมือต่อไปนี้ติดตั้งบนเครื่องคอมพิวเตอร์ของคุณ:</span></p><ul class="lst-kix_list_1-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Node.js:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เวอร์ชัน 18.x หรือสูงกว่า</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">NPM</span><span> หรือ </span><span style="font-weight:700">Yarn:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ตัวจัดการ Package (มาพร้อมกับ Node.js)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">NestJS CLI:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ติดตั้งผ่านคำสั่ง npm install -g @nestjs/cli</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Git:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สำหรับการ Clone โปรเจกต์จาก Gitea</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Docker:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> (แนะนำ) สำหรับการรันฐานข้อมูล MariaDB ในสภาพแวดล้อมที่เหมือนกับ Production</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">2. ขั้นตอนการติดตั้งและเริ่มใช้งาน (Installation & Setup)</span></h2><ol class="lst-kix_list_2-0 start" start="1" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Clone โปรเจกต์:</span></li></ol><ul class="lst-kix_list_3-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">คัดลอกโปรเจกต์จาก Gitea repository ของคุณมาไว้ที่เครื่อง</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span><!-- end list --></span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier";font-style:normal">git clone [http://git.np-dms.work/your-repo/backend-np-dms.git](http://git.np-dms.work/your-repo/backend-np-dms.git)<br>cd backend-np-dms<br></span></p><ol class="lst-kix_list_2-0" start="2" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ติดตั้ง Dependencies:</span></li></ol><ul class="lst-kix_list_4-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ใช้ npm เพื่อติดตั้ง Library ทั้งหมดที่โปรเจกต์ต้องการ</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span><!-- end list --></span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier";font-style:normal">npm install<br></span></p><ol class="lst-kix_list_2-0" start="3" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ตั้งค่า Environment File:</span></li></ol><ul class="lst-kix_list_5-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สร้างไฟล์ใหม่ชื่อ .env ที่รากของโปรเจกต์</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">คัดลอกเนื้อหาจากไฟล์ .env.example (ถ้ามี) หรือใช้โครงสร้างด้านล่าง แล้วแก้ไขค่าให้ตรงกับสภาพแวดล้อมของคุณ (โดยเฉพาะข้อมูลการเชื่อมต่อฐานข้อมูล)</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span style="font-weight:700">ไฟล์ .env (ตัวอย่าง):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier";font-style:normal"># Database Configuration<br>DB_TYPE=mysql<br>DB_HOST=localhost<br>DB_PORT=3306<br>DB_USERNAME=your_db_user<br>DB_PASSWORD=your_db_password<br>DB_DATABASE=dms_db<br><br># JWT Configuration<br>JWT_SECRET=your_super_long_and_random_jwt_secret<br><br># Application Configuration<br>API_PORT=3001<br></span></p><ol class="lst-kix_list_2-0" start="4" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เริ่มต้นฐานข้อมูล:</span></li></ol><ul class="lst-kix_list_6-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ตรวจสอบให้แน่ใจว่า MariaDB Server ของคุณกำลังทำงาน</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สร้างฐานข้อมูลชื่อ dms_db (หรือตามที่คุณตั้งค่าใน .env)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">นำไฟล์ SQL Scripts (01_..., 05_..., 06_...) ไปรันในฐานข้อมูลเพื่อสร้างตารางและใส่ข้อมูลเริ่มต้น</span></li></ul><ol class="lst-kix_list_2-0" start="5" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">รันแอปพลิเคชัน (Development Mode):</span></li></ol><ul class="lst-kix_list_7-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ใช้คำสั่งนี้เพื่อเริ่ม Backend server ในโหมดพัฒนา ซึ่งจะมีการรีสตาร์ทอัตโนมัติเมื่อมีการแก้ไขโค้ด</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span><!-- end list --></span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier";font-style:normal">npm run start:dev<br></span></p><ol class="lst-kix_list_2-0" start="6" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ตรวจสอบการทำงาน:</span></li></ol><ul class="lst-kix_list_8-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">หากทุกอย่างถูกต้อง คุณจะเห็น Log การเริ่มต้นทำงานและเชื่อมต่อฐานข้อมูลใน Terminal</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เปิดเว็บเบราว์เซอร์แล้วไปที่ http://localhost:3001/api-docs เพื่อดูหน้าเอกสาร API ของ Swagger</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">3. สถาปัตยกรรมและโครงสร้างโปรเจกต์</span></h2><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Backend นี้ใช้สถาปัตยกรรมแบบ Modular ของ NestJS ซึ่งจัดระเบียบโค้ดตามฟังก์ชันการทำงาน (Feature) ทำให้ง่ายต่อการจัดการและขยายระบบ</span></p><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">โครงสร้างโฟลเดอร์หลัก:</span></p><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier";font-style:normal">src/<br>├── attachments/ # 📎 โมดูลจัดการไฟล์แนบ<br>├── audit-logs/ # 📋 โมดูลบันทึกการตรวจสอบ<br>├── auth/ # 🔑 โมดูลยืนยันตัวตนและจัดการสิทธิ์<br>├── circulations/ # 🔄 โมดูลการเวียนเอกสาร<br>├── common/ # 🌐 โฟลเดอร์สำหรับโค้ดที่ใช้ร่วมกัน<br>├── contracts/ # 📑 โมดูลจัดการสัญญา<br>├── correspondences/ # 💌 โมดูลจัดการเอกสารหลัก<br>├── dashboard/ # 📊 โมดูลสำหรับ API หน้า Dashboard<br>├── drawings/ # 🖼️ โมดูลจัดการข้อมูล Drawing<br>├── lookup/ # 🗂️ โฟลเดอร์เก็บ Entity ที่เป็น Master Data<br>├── organizations/ # 🏢 โมดูลจัดการองค์กร<br>├── permissions/ # 🔐 โมดูลจัดการ Permissions<br>├── projects/ # 🏗️ โมดูลจัดการโครงการ<br>├── rbac/ # 🧑💼 โมดูลจัดการการกำหนดสิทธิ์ (RBAC)<br>├── reports/ # 📈 โมดูลสร้างรายงาน<br>├── roles/ # 🛡️ โมดูลจัดการ Roles<br>├── tags/ # 🏷️ โมดูลจัดการแท็ก<br>├── technical-docs/ # ⚙️ โมดูลเอกสารทางเทคนิค<br>├── users/ # 👤 โมดูลจัดการผู้ใช้<br>├── app.module.ts # Root Module ที่รวบรวมทุก Module<br>└── main.ts # ไฟล์เริ่มต้นของแอปพลิเคชัน<br></span></p></div></div></div></div></body></html>
|
||
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
|
||
Content-Type: text/css
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: https://themes.googleusercontent.com/fonts/css?kit=kbffV7V9BIH3Ot2AQ2LQRA
|
||
|
||
@charset "utf-8";
|
||
|
||
@font-face { font-family: Courier; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/l/font?kit=i7dKIFtyYSaNG9A_JrmedWxeSFI&skey=415f62b718dd1a36&v=v12") format("woff2"); unicode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
|
||
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
|
||
Content-Type: text/css
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: cid:css-a43a30ce-0932-481b-8734-60b84ca204e0@mhtml.blink
|
||
|
||
@charset "utf-8";
|
||
|
||
@import url("https://themes.googleusercontent.com/fonts/css?kit=kbffV7V9BIH3Ot2AQ2LQRA");
|
||
|
||
ol.lst-kix_list_7-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-0 { list-style-type: none; }
|
||
|
||
ol.lst-kix_list_3-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-0 > li::before { content: "" counter(lst-ctn-kix_list_3-0) ". "; }
|
||
|
||
ul.lst-kix_list_5-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_3-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_5-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_4-0 > li { counter-increment: lst-ctn-kix_list_4-0 1; }
|
||
|
||
.lst-kix_list_8-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-0 > li { counter-increment: lst-ctn-kix_list_5-0 1; }
|
||
|
||
.lst-kix_list_6-0 > li { counter-increment: lst-ctn-kix_list_6-0 1; }
|
||
|
||
.lst-kix_list_7-0 > li { counter-increment: lst-ctn-kix_list_7-0 1; }
|
||
|
||
.lst-kix_list_8-0 > li { counter-increment: lst-ctn-kix_list_8-0 1; }
|
||
|
||
ul.lst-kix_list_1-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_1-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_1-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_5-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-0 > li::before { content: "" counter(lst-ctn-kix_list_8-0) ". "; }
|
||
|
||
ul.lst-kix_list_1-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-0 > li { counter-increment: lst-ctn-kix_list_2-0 1; }
|
||
|
||
.lst-kix_list_8-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-4 > li::before { content: "■ "; }
|
||
|
||
ol.lst-kix_list_5-0.start { counter-reset: lst-ctn-kix_list_5-0 0; }
|
||
|
||
.lst-kix_list_8-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-0 > li::before { content: "" counter(lst-ctn-kix_list_5-0) ". "; }
|
||
|
||
ol.lst-kix_list_6-0 { list-style-type: none; }
|
||
|
||
ol.lst-kix_list_2-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_4-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_4-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_8-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_8-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_4-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_4-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_6-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_6-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-0 > li::before { content: "" counter(lst-ctn-kix_list_6-0) ". "; }
|
||
|
||
.lst-kix_list_6-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-0 > li { counter-increment: lst-ctn-kix_list_3-0 1; }
|
||
|
||
ol.lst-kix_list_4-0.start { counter-reset: lst-ctn-kix_list_4-0 0; }
|
||
|
||
.lst-kix_list_6-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-8 > li::before { content: "■ "; }
|
||
|
||
ol.lst-kix_list_8-0.start { counter-reset: lst-ctn-kix_list_8-0 0; }
|
||
|
||
.lst-kix_list_6-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-0 > li::before { content: "" counter(lst-ctn-kix_list_7-0) ". "; }
|
||
|
||
.lst-kix_list_6-6 > li::before { content: "■ "; }
|
||
|
||
ol.lst-kix_list_5-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_2-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_7-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_7-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-8 { list-style-type: none; }
|
||
|
||
ol.lst-kix_list_3-0.start { counter-reset: lst-ctn-kix_list_3-0 0; }
|
||
|
||
ul.lst-kix_list_3-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_7-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_7-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_7-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_3-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_4-0 > li::before { content: "" counter(lst-ctn-kix_list_4-0) ". "; }
|
||
|
||
.lst-kix_list_4-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_4-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-6 > li::before { content: "■ "; }
|
||
|
||
ol.lst-kix_list_7-0.start { counter-reset: lst-ctn-kix_list_7-0 0; }
|
||
|
||
ol.lst-kix_list_4-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_2-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-2 { list-style-type: none; }
|
||
|
||
ol.lst-kix_list_8-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_1-2 > li::before { content: "■ "; }
|
||
|
||
ol.lst-kix_list_2-0.start { counter-reset: lst-ctn-kix_list_2-0 0; }
|
||
|
||
ul.lst-kix_list_2-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-0 > li::before { content: "" counter(lst-ctn-kix_list_2-0) ". "; }
|
||
|
||
.lst-kix_list_2-1 > li::before { content: "○ "; }
|
||
|
||
ol.lst-kix_list_6-0.start { counter-reset: lst-ctn-kix_list_6-0 0; }
|
||
|
||
.lst-kix_list_1-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-3 > li::before { content: "■ "; }
|
||
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
|
||
Content-Type: image/png
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: https://ssl.gstatic.com/docs/common/mobileweb_sprite1.png
|
||
|
||
<EFBFBD>PNG
|
||
|
||
|