diff --git a/README.md b/README.md index 48fc2bb..1c52ace 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,86 @@ # 🌐 OpenGIS -[![Deploy Status](https://img.shields.io/badge/deploy-success-brightgreen?style=flat-square&logo=vercel)](https://opengis.softwarecraft.tech/) [![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](#license) -> Frontend สำหรับระบบ OpenGIS และแสดงผลแบบ Responsive ด้วย React + TailwindCSS ✨ -> ระบบนี้จะถูก Deploy ไปที่: 🌍 **[https://opengis.softwarecraft.tech/](https://opengis.softwarecraft.tech/)** - +> ระบบภูมิสารสนเทศ OpenGIS ที่มี CMS สำหรับให้จัดการข้อมูลโดยผู้ใช้งานได้ ✨ --- ## 🚀 Features - ✅ จัดการข้อมูลที่ต้องการได้ (CRUD) -- 🌞🌙 ปุ่มสลับธีม Light/Dark พร้อม Animationร +- 🌞🌙 ปุ่มสลับธีม Light/Dark - 📋 ตารางข้อมูลพร้อมปุ่ม Update และ Delete - 🔒 Modal ยืนยันการลบข้อมูล - 💅 ใช้ TailwindCSS และ DaisyUI สำหรับ UI ที่ดูดี - ⚠️ หมายเหตุ: อยู่ระหว่างการพัฒนา โค้ดปัจจุบันยังไม่ใช่รูปแบบการทำงานจริงทั้งหมด --- -## 🧪 Tech Stack +## 🌟 แผนการพัฒนาในอนาคต -| Technology | Description | -|--------------|------------------------------------| -| ⚛️ React | Frontend JavaScript Framework | -| 💨 TailwindCSS | Utility-first CSS Framework | -| 🖌️ DaisyUI | Component UI บนพื้นฐาน Tailwind | -| 🧠 Gitea | Git Self-hosted Repository | -| 🚀 Drone CI | การทำ Continuous Integration และ Continuous Delivery (CI/CD) | -| 🚀 SonarQube | การวิเคราะห์คุณภาพโค้ด (Code Quality) | +- 📈 เพิ่มฟีเจอร์แผนที่ (Map) +- 🌐 รองรับหลายภาษาเพื่อการใช้งานที่หลากหลาย +- 📱 พัฒนาแอปพลิเคชันมือถือสำหรับการเข้าถึงที่สะดวกขึ้น +- 🔍 ปรับปรุงระบบค้นหาให้มีประสิทธิภาพมากขึ้น +- 🛡️ เพิ่มระบบความปลอดภัยขั้นสูงเพื่อปกป้องข้อมูลผู้ใช้ +- 🤖 ใช้ AI และ Machine Learning เพื่อเพิ่มประสิทธิภาพการทำงาน +- 📊 เพิ่มการแสดงผลข้อมูลแบบกราฟิกและแดชบอร์ด +- 🛠️ ปรับปรุง UI/UX ให้ใช้งานง่ายและสวยงามยิ่งขึ้น +- 🚀 เพิ่มการรองรับการทำงานร่วมกับระบบอื่น ๆ ผ่าน API +- 💬 เพิ่มระบบแชทบอทเพื่อช่วยเหลือผู้ใช้แบบเรียลไทม์ +- 📋 ตารางแสดงข้อมูลอื่น ๆ พร้อมปุ่ม Update และ Delete --- -## 🔗 Deployment +## 🧪 Tech Stack -ระบบนี้จะถูก Deploy ไปยัง: -👉 **[https://opengis.softwarecraft.tech/](https://opengis.softwarecraft.tech/)** - -⚠️ หมายเหตุ: ระบบยังอยู่ในระหว่างการพัฒนา อาจมีการเปลี่ยนแปลงในอนาคต +| Technology | Description | +|----------------|------------------------------------| +| ⚛️ React | Frontend JavaScript Framework | +| 💨 TailwindCSS | Utility-first CSS Framework | +| 🖌️ DaisyUI | Component UI บนพื้นฐาน Tailwind | +| 🧠 Spring Boot | เฟรมเวิร์กที่ช่วยให้การพัฒนาแอปพลิเคชัน Java | +⚠️ หมายเหตุ: อยู่ระหว่างการพัฒนา จะมีการเพิ่ม Technology อื่น ๆ ในอนาคต --- ## 🛠️ Development -### 1. ขั้นตอนสำหรับ Frontend +แนะนำให้ใช้ IDE เช่น IntelliJ IDEA หรือ VS Code เป็นต้น ในการพัฒนา + +### 1. ขั้นตอนสำหรับการพัฒนา Frontend และ Employee Service บน Local + +หากต้องการพัฒนา Frontend และ Employee Service แบบ local dev ไม่ต้องใช้ Docker ก็สามารถทำได้ตามขั้นตอนข้างล่าง +- ไฟล์ employee.js กำหนด BASE_URL เป็น "http://localhost:8080/api/employees" +- ไฟล์ application.yml กำหนด datasource url เป็น jdbc:postgresql://localhost:5432/employee_service +- ไฟล์ EmployeeController.java กำหนด @CrossOrigin("http://localhost:5174") +- รัน Docker Compose เฉพาะ Service ที่จำเป็น + +``` bash +docker compose up -d postgres pgadmin +``` + +- รัน Employee Service +- รัน Frontend ``` bash -cd frontend npm install npm run dev ``` -หากต้องการรันเฉพาะ frontend แบบ local dev ไม่ต้องใช้ Docker ก็สามารถทำได้ตามขั้นตอนข้างบน -### 2. ขั้นตอนสำหรับ Employee Service (Backend) +จากนั้นสามารถเข้าใช้งานที่ -ต้องติดตั้ง JDK 21+ และ Maven +- Frontend: http://localhost:5174 -``` bash -cd employee-service -./mvnw spring-boot:run -``` -แนะนำให้ใช้ IDE เช่น IntelliJ IDEA หรือ VS Code ในการพัฒนา +- Backend (Employee Service): http://localhost:8080/api/employees -### 3. การทดสอบระบบแบบรวม (Frontend + Backend) +- PGAdmin: http://localhost:8180/ -ใช้คำสั่งเดียวเพื่อรันทั้งระบบผ่าน Docker Compose +### 2. การทดสอบระบบแบบรวม (Frontend + Backend) ด้วย Docker Compose + +- ไฟล์ employee.js กำหนด BASE_URL เป็น "/api/employees" +- ไฟล์ application.yml กำหนด datasource url เป็น jdbc:postgresql://ms_pg_sql:5432/employee_service +- ไฟล์ EmployeeController.java กำหนด @CrossOrigin("http://localhost") +- ใช้คำสั่งเดียวเพื่อรันทั้งระบบผ่าน Docker Compose ``` bash docker compose up -d @@ -77,4 +94,4 @@ docker compose up -d --- ## 🤝 Contributing -Pull requests welcome! หากมีคำแนะนำหรือข้อเสนอแนะ ยินดีรับฟังเสมอ 🙌 \ No newline at end of file +หากมีคำแนะนำหรือข้อเสนอแนะ ติดต่อที่ admin@softwarecraft.tech \ No newline at end of file diff --git a/employee-service/src/main/java/tech/softwarecraft/employee_service/controller/EmployeeController.java b/employee-service/src/main/java/tech/softwarecraft/employee_service/controller/EmployeeController.java index d540893..9570d58 100644 --- a/employee-service/src/main/java/tech/softwarecraft/employee_service/controller/EmployeeController.java +++ b/employee-service/src/main/java/tech/softwarecraft/employee_service/controller/EmployeeController.java @@ -7,7 +7,7 @@ import tech.softwarecraft.employee_service.service.EmployeeService; import java.util.List; -@CrossOrigin("http://localhost") // ถ้า nginx ทำ HTTPS จะเปลี่ยนตาม +@CrossOrigin("http://localhost:5174") // http://localhost กรณี docker compose, ถ้า nginx ทำ HTTPS จะเปลี่ยนตาม @RestController @RequestMapping("/api/employees") public class EmployeeController { diff --git a/employee-service/src/main/java/tech/softwarecraft/employee_service/service/EmployeeService.java b/employee-service/src/main/java/tech/softwarecraft/employee_service/service/EmployeeService.java index d1714e3..41ffd4e 100644 --- a/employee-service/src/main/java/tech/softwarecraft/employee_service/service/EmployeeService.java +++ b/employee-service/src/main/java/tech/softwarecraft/employee_service/service/EmployeeService.java @@ -17,6 +17,9 @@ public class EmployeeService { // Create Employee public Employee createEmployee(Employee employee) { + if (employeeRepository.existsById(employee.getId())) { + throw new IllegalArgumentException("Employee with id " + employee.getId() + " already exists"); + } return employeeRepository.save(employee); } diff --git a/employee-service/src/main/resources/application.yml b/employee-service/src/main/resources/application.yml index 8ee8255..ed308d4 100644 --- a/employee-service/src/main/resources/application.yml +++ b/employee-service/src/main/resources/application.yml @@ -3,7 +3,7 @@ spring: name: employee-service datasource: - url: jdbc:postgresql://ms_pg_sql:5432/employee_service + url: jdbc:postgresql://localhost:5432/employee_service # ms_pg_sql ???? docker compose ??????? username: admin password: 123 diff --git a/frontend/src/api/employee.js b/frontend/src/api/employee.js index def1fe7..47a6428 100644 --- a/frontend/src/api/employee.js +++ b/frontend/src/api/employee.js @@ -1,4 +1,4 @@ -const BASE_URL = "/api/employees"; +const BASE_URL = "http://localhost:8080/api/employees"; // /api/employees กรณี docker compose ทั้งหมด export const getEmployees = async ()=>{ try{ @@ -27,10 +27,10 @@ export const addEmployee = async (employee) =>{ }); if(!response.ok){ - throw new Error("Fail to create employee"); + throw new Error("Fail to create employee") } - const data = response.json(); + const data = await response.json(); return data; } catch (e) { @@ -53,7 +53,7 @@ export const updateEmployee = async (id, employee) => { throw new Error("Fail to update employee") } - const data = response.json(); + const data = await response.json(); return data; } catch (e) { @@ -96,7 +96,7 @@ export const searchEmployees = async (keyword) => { throw new Error("Fail to search employees"); } - const data = response.json(); + const data = await response.json(); return data; } catch (e) { diff --git a/img.png b/img.png new file mode 100644 index 0000000..9aa0365 Binary files /dev/null and b/img.png differ diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000..9e20f70 Binary files /dev/null and b/img_1.png differ diff --git a/img_2.png b/img_2.png new file mode 100644 index 0000000..71be943 Binary files /dev/null and b/img_2.png differ diff --git a/img_3.png b/img_3.png new file mode 100644 index 0000000..9e20f70 Binary files /dev/null and b/img_3.png differ