Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions Apps/Note/Data Flow Diagram.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
เครื่องมือที่ต้องใช้ในการทำงาน

1) ภาษาที่เราเลือกใช้ในงาน
1.1 Go language
1.2 Python
1.3 JavaScript (TypeScript)
1.4 HTML/CSS

2) Framewroks
2.1 Ollama
2.2 Line-SDK
2.3 Flask
2.4 Django
2.5 Ngnix
2.6 Docker
2.7 NodeJS
2.8 MongoDB

บทบาทสำหรับการใช้งาน

Frontend
เราประกอบไปดังนี้
1. หน้าเว็บไซต์
1.1 หน้าเว็บไซต์สำหรับการวิเคราะห์ข้อมูล
2. Line-rich-menu-liff

Backend
1) เว็บไซต์
การดูแลหลังบ้านเราของเว็บไซต์เราแบ่งเป็นสองส่วนได้แก่
Go language => ใช้จัดการข้อมูลของเว็บไซต์ทั่วไป
Python (Django) => ใช้ในการวิเคราะห์ข้อมูล
2) Line
Python (Flask) => ใช้จัดการทั้งหมดบนไลน์
85 changes: 85 additions & 0 deletions Apps/Review/InsuranceCalculator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
## Outline

## Problem & Solution
'''
const availablePlans = plansByPackage[stepData.selectedPackage] || [];
//const availablePlans = getSubPlanOptions(stepData.selectedPackage);
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<h4 className="font-semibold text-brand-green">เลือกแผนความคุ้มครอง</h4>
<Button variant="outline" size="sm" onClick={goBackStep}>
ย้อนกลับ
</Button>
</div>
<p className="text-sm text-gray-600">แพ็กเกจที่เลือก: {stepData.selectedPackage}</p>
<div className="grid gap-3">
{availablePlans.map((plan) => (
<Button
key={plan}
variant="outline"
className="h-auto p-4 text-left justify-start"
onClick={() => selectPlan(plan)}
>
<Shield className="w-4 h-4 mr-2 flex-shrink-0" />
<span className="text-sm">{plan}</span>
</Button>
))}
</div>
</div>
);
'''

ปัญหาที่พบ : เมื่อเราใช้งาน Multi-step flow ในขั้นตอนที่ 2 จะพบปัญหาราคาของแพ็คเกจไม่ขึ้น
วิธีการแก้ไข :
เริ่มต้นจาก
```
const getSubPlanOptions = (packageName: string): any[] => {
const pkg = packagesData.find(p => p.name === packageName);
if (!pkg || !pkg.subPackages || !Array.isArray(pkg.subPackages)) return [];

return pkg.subPackages.map((sub: any) => ({
id: sub.id,
name: sub.name
}));
};
```
หากเราสังเกตจะพบว่าตัว getSubPlanOptions ไม่ได้ return ไม่ถูกต้องเนื่องจากไม่ได้ดึงข้อมูลเกี่ยวกับราคาออกมาเลย ซึ่งอาจจะสอดคล้องกับข้อมูลเก่า เราจะพบว่าไม่สอดของกับข้อมูลใน Database ที่เราได้ใช้ซึ่งทำให้พบปัญหาการไม่แสดงข้อมูล
hardcode.json'''
[
{ id: 'basic', name: 'Basic Plan' },
{ id: 'premium', name: 'Premium Plan' }
]
'''

db_collection.json'''
[
{
id: "11-15",
ageFrom: 11,
ageTo: 15,
premium: 21600,
label: "อายุ 11–15: ฿21,600"
},
...
]
'''
แก้ไขโดยการดึงข้อมูลออกมาให้ครบตามที่เราต้องการ
'''

const getPlanOptionsFromPricing = (packageName: string): { label: string }[] => {
const pkg = packagesData.find(p => p.name === packageName);
if (!pkg || !Array.isArray(pkg.pricing)) return [];

const gender = formData.gender === 'male' ? 'male' : 'female'; // fallback เป็น 'female' ก็ได้

return pkg.pricing.map((p: any) => {
const ageLabel = `อายุ ${p.ageFrom} ถึง ${p.ageTo}`;
const price = p[gender];

return {
label: `${ageLabel} : ฿ ${price?.toLocaleString() ?? '-'}`,
};
});
};
'''
5 changes: 3 additions & 2 deletions Apps/.env → Apps/backend/.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ CHANNEL_TOKEN=qyflOf3hPw+QSBsJ2e3VPt+snbADiut9+dTWShe0fq2kB3LyfynsB7V9G0ssAevh96
OLLAMA_URL=http://localhost:11434/api/generate
OLLAMA_MODEL=llama3.2
MONGO_URI=mongodb://localhost:27017/
MONGO_DB=Testing
MONGO_DB_COLLECTION=Packages
MONGO_DB=insurance
MONGO_DB_COLLECTION=Packages
PORT=8080
File renamed without changes.
File renamed without changes.
39 changes: 39 additions & 0 deletions Apps/backend/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package config

import (
"log"
"os"

"github.com/joho/godotenv"
)

type Config struct {
CHANNEL_SECRET string
CHANNEL_TOKEN string
OLLAMA_URL string
OLLAMA_MODEL string
MongoURI string
MongoDBName string
MongoCollection string
Port string
}

func LoadConfig() *Config {
_ = godotenv.Load()

cfg := &Config{
CHANNEL_SECRET: os.Getenv("CHANNEL_SECRET"),
CHANNEL_TOKEN: os.Getenv("CHANNEL_TOKEN"),
OLLAMA_URL: os.Getenv("OLLAMA_URL"),
OLLAMA_MODEL: os.Getenv("OLLAMA_MODEL"),
MongoURI: os.Getenv("MONGO_URI"),
MongoDBName: os.Getenv("MONGO_DB"),
MongoCollection: os.Getenv("MONGO_DB_COLLECTION"),
Port: os.Getenv("PORT"),
}

if cfg.MongoURI == "" || cfg.MongoDBName == "" {
log.Fatal("Missing required environment vars")
}
return cfg
}
40 changes: 40 additions & 0 deletions Apps/backend/database/database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package database

import (
"context"
"net/http"

"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

func ConnectToMongoDB(uri string) (*mongo.Client, error) {
clientOptions := options.Client().ApplyURI(uri)
client, err := mongo.Connect(context.TODO(), clientOptions)
return client, err
}

func CreateDatabase(client *mongo.Client, DB_NAME string, COLLECTION_NAME string) *mongo.Collection {
return client.Database(DB_NAME).Collection(COLLECTION_NAME)
}

func GetAllDocuments(collection *mongo.Collection) gin.HandlerFunc {
return func(c *gin.Context) {
cursor, err := collection.Find(context.TODO(), bson.M{}) // ไม่มี filter ดึงทั้งหมด
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Database error"})
return
}
defer cursor.Close(context.TODO())

var results []bson.M
if err := cursor.All(context.TODO(), &results); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Cursor error"})
return
}

c.JSON(http.StatusOK, results)
}
}
File renamed without changes.
49 changes: 49 additions & 0 deletions Apps/backend/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
module backend

go 1.23.0

toolchain go1.23.10

require (
github.com/gin-contrib/cors v1.7.6
github.com/gin-gonic/gin v1.10.1
github.com/joho/godotenv v1.5.1
go.mongodb.org/mongo-driver v1.17.4
)

require (
github.com/bytedance/sonic v1.13.3 // indirect
github.com/bytedance/sonic/loader v0.2.4 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
github.com/gin-contrib/sse v1.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.26.0 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/montanaflynn/stats v0.7.1 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.3.0 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
golang.org/x/arch v0.18.0 // indirect
golang.org/x/crypto v0.39.0 // indirect
golang.org/x/net v0.41.0 // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.26.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading