ปรับปรุง Employee Service และ README
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Flook 2025-04-16 05:24:42 +07:00
parent 58ea6c08a4
commit 1f1ed79571
9 changed files with 59 additions and 39 deletions

View File

@ -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! หากมีคำแนะนำหรือข้อเสนอแนะ ยินดีรับฟังเสมอ 🙌
หากมีคำแนะนำหรือข้อเสนอแนะ ติดต่อที่ admin@softwarecraft.tech

View File

@ -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 {

View File

@ -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);
}

View File

@ -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

View File

@ -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) {

BIN
img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

BIN
img_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

BIN
img_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

BIN
img_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B