# ๐๏ธ Steel Prices Service > ไธไธชไธไธ็้ขๆไปทๆ ผๆฅ่ฏขไธๅๆๆๅกๅนณๅฐ [](https://nodejs.org/) [](https://www.mysql.com/) [](LICENSE) [](https://github.com) --- ## ๐ ้กน็ฎ็ฎไป Steel Prices Service ๆฏไธไธชๅบไบ **Express.js + MySQL** ็้ขๆไปทๆ ผๆฐๆฎ็ฎก็ไธๆฅ่ฏขๆๅกใ้กน็ฎ่ดๅไบไธบ้ขๆ่กไธๆไพๅฎๆถใๅ็กฎ็ไปทๆ ผๆฐๆฎๆฅ่ฏขใ็ป่ฎกๅๆๅ่ถๅฟ้ขๆตๅ่ฝใ ### ๆ ธๅฟๅ่ฝ - ๐ **ๆฐๆฎ่งฃๆไธๅฏผๅ ฅ** - ๆฏๆ JSON ๆ ผๅผ็้ขๆไปทๆ ผๆฐๆฎๆน้ๅฏผๅ ฅ - ๐ **็ตๆดปๆฅ่ฏข** - ๆๅฐๅบใๆ่ดจใ่งๆ ผใๆฅๆ่ๅด็ญๅค็ปดๅบฆๆฅ่ฏข - ๐ **็ป่ฎกๅๆ** - ไปทๆ ผ่ถๅฟๅๆใๅบๅๅฏนๆฏใๅไปท่ฎก็ฎ - ๐ **้ซๆง่ฝ** - ๆฐๆฎๅบ็ดขๅผไผๅ๏ผๆฅ่ฏขๅๅบๅฟซ้ - ๐ **ๅฎๆถๆดๆฐ** - ่ชๅจ้้ๆๆฐๅธๅบไปทๆ ผๆฐๆฎ - ๐ฑ **RESTful API** - ๆ ๅๅๆฅๅฃ่ฎพ่ฎก๏ผๆไบ้ๆ --- ## ๐๏ธ ๆๆฏๆถๆ ### ๆๆฏๆ | ๅฑ็บง | ๆๆฏ้ๅ | ่ฏดๆ | |------|----------|------| | **ๅ็ซฏๆกๆถ** | Express.js | ่ฝป้็บง Node.js Web ๆกๆถ | | **ๆฐๆฎๅบ** | MySQL 8.0+ | ๅ ณ็ณปๅๆฐๆฎๅบ๏ผๅญๅจไปทๆ ผๆฐๆฎ | | **API ๆๆกฃ** | Swagger (OpenAPI 3.0) | ไบคไบๅผ API ๆๆกฃ | | **ORM** | Sequelize / ๅ็ SQL | ๆฐๆฎๅบๆไฝๆฝ่ฑกๅฑ | | **ๆฐๆฎ้้** | Axios + Cheerio | ็ฝ็ป็ฌ่ซ๏ผ่ชๅจ้้ไปทๆ ผๆฐๆฎ | | **ไปปๅก่ฐๅบฆ** | node-cron | ๅฎๆถไปปๅก๏ผ่ชๅจๆดๆฐๆฐๆฎ | | **ๆต่ฏ** | Jest / Mocha | ๅๅ ๆต่ฏไธ้ๆๆต่ฏ | | **ๅฎนๅจๅ** | Docker | ๅบ็จๅฎนๅจๅ้จ็ฝฒ | ### ็ณป็ปๆถๆ ``` โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ๅฎขๆท็ซฏๅฑ (Client) โ โ Web / Mobile App / Third Party โ โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ HTTPS / REST API โโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ๆๅกๆฅๅฃๅฑ (API Layer) โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ โ โ REST API โ โ WebSocket โ โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ไธๅก้ป่พๅฑ (Service Layer) โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ โ โ ๆฅ่ฏขๆๅก โ โ ็ป่ฎกๆๅก โ โ ้้ๆๅก โ โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ๆฐๆฎ่ฎฟ้ฎๅฑ (Data Layer) โ โ โโโโโโโโโโโโโโโโ โ โ โ MySQL โ โ โ โ (ไธปๅญๅจ) โ โ โ โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ``` --- ## ๐ฆ ๆฐๆฎ่ตไบง ้กน็ฎๅฝๅๅ ๅซ **31,098 ๆก**้ขๆไปทๆ ผๆฐๆฎ่ฎฐๅฝ๏ผ | ๆฐๆฎๆบ | ่ฎฐๅฝๆฐ | ่ฆ็ๅฐๅบ | ๆดๆฐๆฅๆ | ็ถๆ | |--------|--------|----------|----------|------| | **ๆ็้ข้็ฝ** | 211 ๆก | ้ๅบใๆ้ฝใๅนฟๅทใๅๅฎ | 2026-01-05 | โ ๆฐ้ฒ | | **ๅพท้ขๆๅฏผไปท** | 29,987 ๆก | ไบๅ๏ผ็ๆบชใๆญ้็ญ๏ผ | 2025-09-04 | โ ๏ธ ้ๆง | | **ไบๅ้ขๅ** | 900 ๆก | ๆๆใ็ๆบชใๆฅ้ใๅคง็ | 2026-01-05 | โ ๆฐ้ฒ | ๆฐๆฎๆไปถไฝไบ [`data/`](data/) ็ฎๅฝ๏ผ่ฏฆ่ง [data/CLAUDE.md](data/CLAUDE.md)ใ --- ## ๐ ๅฟซ้ๅผๅง ### ็ฏๅข่ฆๆฑ - **Node.js**: >= 16.x - **MySQL**: >= 8.0 ### ๅฎ่ฃ ๆญฅ้ชค #### 1. ๅ ้้กน็ฎ ```bash git clone https://github.com/your-username/steel_prices_service.git cd steel_prices_service ``` #### 2. ๅฎ่ฃ ไพ่ต ```bash npm install ``` #### 3. ้ ็ฝฎ็ฏๅขๅ้ ๅคๅถ `.env.example` ๅฐ `.env` ๅนถ้ ็ฝฎ๏ผ ```bash cp .env.example .env ``` ็ผ่พ `.env` ๆไปถ๏ผ ```env # ๆๅกๅจ้ ็ฝฎ NODE_ENV=development PORT=3000 # ๆฐๆฎๅบ้ ็ฝฎ DB_HOST=localhost DB_PORT=3306 DB_NAME=steel_prices DB_USER=root DB_PASSWORD=your_password # ๆฅๅฟ้ ็ฝฎ LOG_LEVEL=info ``` #### 4. ๅๅงๅๆฐๆฎๅบ ```bash # ๅๅปบๆฐๆฎๅบ mysql -u root -p -e "CREATE DATABASE steel_prices CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # ๅฏผๅ ฅ่กจ็ปๆ๏ผไฝฟ็จ scripts/init-db.sql ๆ่ฟ่กๅๅงๅ่ๆฌ๏ผ npm run db:init # ๅฏผๅ ฅๆฐๆฎ๏ผไป data/ ็ฎๅฝ็ JSON ๆไปถ๏ผ npm run db:import ``` #### 5. ๅฏๅจๆๅก ```bash # ๅผๅๆจกๅผ๏ผ็ญ้่ฝฝ๏ผ npm run dev # ็ไบงๆจกๅผ npm start ``` ๆๅกๅฐๅจ `http://localhost:3000` ๅฏๅจใ --- ## ๐ API ๆๆกฃ ### ๐ ไบคไบๅผๆๆกฃ๏ผSwagger UI๏ผ ๅฏๅจๆๅกๅ๏ผ่ฎฟ้ฎ **Swagger UI** ๆฅ็ๅฎๆด็ API ๆๆกฃ๏ผ ``` http://localhost:3000/api-docs ``` **ๅ่ฝ็นๆง๏ผ** - ๐ ๅฎๆด็ API ๆฅๅฃๆๆกฃ - ๐งช ็ดๆฅๅจๆต่งๅจไธญๆต่ฏ API - ๐ ่ฏฆ็ป็่ฏทๆฑ/ๅๅบ็คบไพ - ๐ ๅๆฐ่ฏดๆๅ้ช่ฏ่งๅ - ๐จ ็พ่ง็ไบคไบๅผ็้ข ่ฏฆ็ปไฝฟ็จ่ฏดๆ่ฏทๆฅ็๏ผ[API ๆๆกฃๆๅ](docs/API_DOCUMENTATION.md) ### ๅบ็กไฟกๆฏ - **Base URL**: `http://localhost:3000/api` - **ๆฐๆฎๆ ผๅผ**: JSON - **ๅญ็ฌฆ็ผ็ **: UTF-8 - **API ่ง่**: OpenAPI 3.0 ### ๆ ธๅฟๆฅๅฃ #### 1. ๆๅฐๅบๆฅ่ฏขไปทๆ ผ ```http GET /api/prices/region?region=ๆๆ&date=2026-01-05 ``` **ๅๅบ็คบไพ**: ```json { "success": true, "data": [ { "id": 1, "region": "ๆๆ", "material": "่บ็บน้ข", "specification": "HRB400 ฮฆ16-25mm", "price": 4200, "unit": "ๅ /ๅจ", "date": "2026-01-05", "source": "ไบๅ้ขๅ" } ], "total": 1 } ``` #### 2. ๆๆ่ดจๅ่งๆ ผๆฅ่ฏข ```http GET /api/prices/search?material=่บ็บน้ข&specification=HRB400&startDate=2026-01-01&endDate=2026-01-05 ``` #### 3. ไปทๆ ผ็ป่ฎกๅๆ ```http GET /api/prices/stats?region=ๆๆ&material=่บ็บน้ข&days=30 ``` **ๅๅบ็คบไพ**: ```json { "success": true, "data": { "avgPrice": 4250.5, "minPrice": 4100, "maxPrice": 4400, "trend": "up", "changeRate": "+2.5%" } } ``` #### 4. ๆฐๆฎๅฏผๅ ฅ ```http POST /api/import Content-Type: multipart/form-data file: prices.json ``` ### ๅฎๆด API ๆๆกฃ ่ฏฆ็ป็ API ๆๆกฃ่ฏทๆฅ็๏ผ - **Swagger UI**: `http://localhost:3000/api-docs` ๏ผๆจ่๏ผ - **JSON ่ง่**: `http://localhost:3000/api-docs.json` - **ไฝฟ็จๆๅ**: [API Documentation](docs/API_DOCUMENTATION.md) --- ## ๐งช ๆต่ฏ ```bash # ่ฟ่กๆๆๆต่ฏ npm test # ่ฟ่กๅๅ ๆต่ฏ npm run test:unit # ่ฟ่ก้ๆๆต่ฏ npm run test:integration # ็ๆๆต่ฏ่ฆ็็ๆฅๅ npm run test:coverage ``` --- ## ๐ ้กน็ฎ็ปๆ ``` steel_prices_service/ โโโ src/ # ๆบไปฃ็ ็ฎๅฝ โ โโโ config/ # ้ ็ฝฎๆไปถ โ โ โโโ database.js # ๆฐๆฎๅบ้ ็ฝฎ โ โ โโโ logger.js # ๆฅๅฟ้ ็ฝฎ โ โโโ controllers/ # ๆงๅถๅจๅฑ โ โ โโโ priceController.js โ โ โโโ importController.js โ โโโ services/ # ไธๅก้ป่พๅฑ โ โ โโโ priceService.js โ โ โโโ statsService.js โ โ โโโ crawlService.js โ โโโ models/ # ๆฐๆฎๆจกๅ โ โ โโโ Price.js โ โ โโโ index.js โ โโโ routes/ # ่ทฏ็ฑๅฎไน โ โ โโโ api.js โ โ โโโ index.js โ โโโ middlewares/ # ไธญ้ดไปถ โ โ โโโ errorHandler.js โ โ โโโ validator.js โ โโโ utils/ # ๅทฅๅ ทๅฝๆฐ โ โ โโโ csvParser.js โ โ โโโ dateHelper.js โ โโโ tasks/ # ๅฎๆถไปปๅก โ โ โโโ priceCrawler.js โ โโโ app.js # Express ๅบ็จๅ ฅๅฃ โโโ data/ # ๆฐๆฎๆไปถ็ฎๅฝ โ โโโ ้ขๆ็ฝๆถ.json โ โโโ ้ขๅๆๅฏผไปท.json โ โโโ ๅๅๆๅฏผไปท.json โ โโโ CLAUDE.md # ๆฐๆฎๆจกๅๆๆกฃ โโโ scripts/ # ่ๆฌ็ฎๅฝ โ โโโ init-db.sql # ๆฐๆฎๅบๅๅงๅ่ๆฌ โ โโโ import-data.js # ๆฐๆฎๅฏผๅ ฅ่ๆฌ โโโ tests/ # ๆต่ฏ็ฎๅฝ โ โโโ unit/ โ โโโ integration/ โโโ docs/ # ๆๆกฃ็ฎๅฝ โ โโโ api.md # API ๆๆกฃ โ โโโ architecture.md # ๆถๆ่ฎพ่ฎกๆๆกฃ โโโ .env.example # ็ฏๅขๅ้็คบไพ โโโ .gitignore # Git ๅฟฝ็ฅๆไปถ โโโ docker-compose.yml # Docker ็ผๆๆไปถ โโโ Dockerfile # Docker ้ๅๆๅปบๆไปถ โโโ package.json # ้กน็ฎ้ ็ฝฎ โโโ CLAUDE.md # ้กน็ฎ AI ไธไธๆๆๆกฃ โโโ README.md # ้กน็ฎ่ฏดๆๆๆกฃ ``` --- ## ๐ง ๅผๅๆๅ ### ็ผ็ ่ง่ ้กน็ฎ้ตๅพชไปฅไธ็ผ็ ่ง่๏ผ่ฏฆ่ง [CLAUDE.md](CLAUDE.md)๏ผ๏ผ - **SOLID ๅๅ** - ๅไธ่่ดฃใๅผ้ญๅๅใ้ๆฐๆฟๆขใๆฅๅฃ้็ฆปใไพ่ตๅ็ฝฎ - **KISS ๅๅ** - ไฟๆไปฃ็ ็ฎๅ็ดๆฅ - **DRY ๅๅ** - ้ฟๅ ไปฃ็ ้ๅค - **YAGNI ๅๅ** - ๅชๅฎ็ฐๅฟ ่ฆๅ่ฝ ### ๆไบค่ง่ ไฝฟ็จ [Conventional Commits](https://www.conventionalcommits.org/) ่ง่๏ผ ```bash feat: ๆฐๅ่ฝ fix: ไฟฎๅค Bug docs: ๆๆกฃๆดๆฐ style: ไปฃ็ ๆ ผๅผ่ฐๆด refactor: ้ๆ test: ๆต่ฏ็ธๅ ณ chore: ๆๅปบ/ๅทฅๅ ท้พๆดๆฐ ``` ### ๅผๅ่ทฏ็บฟๅพ ่ฏฆ่ง [CLAUDE.md - ๅผๅ่ทฏ็บฟๅพ](CLAUDE.md#ๅผๅ่ทฏ็บฟๅพ)ใ #### ๅฝๅ้ถๆฎต๏ผ๐ฑ ้ถๆฎต 1 - ๆฐๆฎๅๅคไธ้ช่ฏ๏ผ่ฟ่กไธญ๏ผ - [x] ๆฐๆฎๆถ้๏ผ31,098 ๆก่ฎฐๅฝ๏ผ - [ ] ๆฐๆฎๅบ่ฎพ่ฎกไธๅปบ่กจ - [ ] ๆฐๆฎๅฏผๅ ฅ่ๆฌๅผๅ - [ ] ๆฐๆฎ้ช่ฏไธๆธ ๆด #### ๅ็ปญ้ถๆฎต - **้ถๆฎต 2**: ๆ ธๅฟๆๅกๅผๅ๏ผAPI ๅผๅ๏ผ - **้ถๆฎต 3**: ๆฐๆฎ้้่ชๅจๅ๏ผๅฎๆถไปปๅก๏ผ - **้ถๆฎต 4**: ๆบ่ฝๅๆไธ้ขๆต๏ผAI ้ๆ๏ผ --- ## ๐ณ Docker ้จ็ฝฒ ### ไฝฟ็จ Docker Compose๏ผๆจ่๏ผ ```bash # ๅฏๅจๆๆๆๅก๏ผMySQL + App๏ผ docker-compose up -d # ๆฅ็ๆฅๅฟ docker-compose logs -f # ๅๆญขๆๅก docker-compose down ``` ### ๅ็ฌๆๅปบ ```bash # ๆๅปบ้ๅ docker build -t steel-prices-service . # ่ฟ่กๅฎนๅจ docker run -p 3000:3000 --env-file .env steel-prices-service ``` --- ## ๐ค ่ดก็ฎๆๅ ๆฌข่ฟ่ดก็ฎไปฃ็ ใๆฅๅ Bug ๆๆๅบๆฐๅ่ฝๅปบ่ฎฎ๏ผ ### ่ดก็ฎๆต็จ 1. Fork ๆฌไปๅบ 2. ๅๅปบ็นๆงๅๆฏ (`git checkout -b feature/AmazingFeature`) 3. ๆไบคๆดๆน (`git commit -m 'feat: Add some AmazingFeature'`) 4. ๆจ้ๅฐๅๆฏ (`git push origin feature/AmazingFeature`) 5. ๆไบค Pull Request ### ไปฃ็ ๅฎกๆฅ - ็กฎไฟไปฃ็ ้่ฟๆๆๆต่ฏ (`npm test`) - ้ตๅพช้กน็ฎ็ผ็ ่ง่ - ๆทปๅ ๅฟ ่ฆ็ๆณจ้ๅๆๆกฃ - ๆดๆฐ็ธๅ ณๆๆกฃ ่ฏฆ่ง [่ดก็ฎๆๅ](CONTRIBUTING.md)ใ --- ## ๐ ่ฎธๅฏ่ฏ ๆฌ้กน็ฎ้็จ [MIT ่ฎธๅฏ่ฏ](LICENSE)ใ --- ## ๐ ่็ณปๆนๅผ - **ไฝ่ **: Your Name - **้ฎ็ฎฑ**: your.email@example.com - **้กน็ฎไธป้กต**: [https://github.com/your-username/steel_prices_service](https://github.com/your-username/steel_prices_service) - **้ฎ้ขๅ้ฆ**: [GitHub Issues](https://github.com/your-username/steel_prices_service/issues) --- ## ๐ ่ด่ฐข - ๆฐๆฎๆฅๆบ๏ผๆ็้ข้็ฝใๅพท้ขใไบๅ้ขๅ - ๆๆฏๆ ๏ผExpress.jsใMySQL - ็คพๅบ่ดก็ฎ่ --- ## ๐ ้กน็ฎ็ถๆ   **ๅฝๅ็ๆฌ**: v0.1.0 (Alpha) **ๆ่ฟๆดๆฐ**: 2026-01-05 ---