Skip to content

Repository files navigation

HaloLight API Go

LicenseGoGinGORM

HaloLight ๅŽๅฐ็ฎก็†็ณป็ปŸ็š„ Go ้ซ˜ๆ€ง่ƒฝๅŽ็ซฏ API ๆœๅŠก๏ผŒๅŸบไบŽ Gin + GORM ๆž„ๅปบ็š„ RESTful APIใ€‚

็‰นๆ€ง

  • Gin Web Framework - ้ซ˜ๆ€ง่ƒฝ HTTP ๆก†ๆžถ
  • GORM 2 - ๅผบๅคง็š„ ORM ๅบ“
  • JWT ๅŒไปค็‰Œ่ฎค่ฏ - Access Token + Refresh Token
  • RBAC ๆƒ้™็ณป็ปŸ - ๅŸบไบŽ่ง’่‰ฒ็š„่ฎฟ้—ฎๆŽงๅˆถ
  • PostgreSQL 16 - ็”Ÿไบง็บงๆ•ฐๆฎๅบ“
  • 12 ไธชไธšๅŠกๆจกๅ— - ๅฎŒๆ•ด็š„ๅŽๅฐ็ฎก็† API
  • 90+ RESTful ็ซฏ็‚น - ่ฆ†็›–ๅธธ่งไธšๅŠกๅœบๆ™ฏ
  • Docker ๆ”ฏๆŒ - ๅฎนๅ™จๅŒ–้ƒจ็ฝฒ
  • ๅฎŒๅ–„็š„้”™่ฏฏๅค„็† - ็ปŸไธ€็š„้”™่ฏฏๅ“ๅบ”ๆ ผๅผ
  • ่พ“ๅ…ฅ้ชŒ่ฏ - ๅŸบไบŽ Gin binding ็š„่‡ชๅŠจ้ชŒ่ฏ

ๆŠ€ๆœฏๆ ˆ

  • Go 1.21+
  • Gin 1.10 - Web ๆก†ๆžถ
  • GORM 1.25 - ORM
  • PostgreSQL 15+ - ๆ•ฐๆฎๅบ“
  • JWT (golang-jwt/jwt/v5) - ่ฎค่ฏ
  • bcrypt - ๅฏ†็ ๅ“ˆๅธŒ

ๅฟซ้€Ÿๅผ€ๅง‹

ๅ‰็ฝฎ่ฆๆฑ‚

  • Go 1.21 ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ
  • PostgreSQL 15+
  • Docker (ๅฏ้€‰)

ๅฎ‰่ฃ…

# ๅ…‹้š†ไป“ๅบ“
git clone https://github.com/halolight/halolight-api-go.git
cd halolight-api-go
# ๅฎ‰่ฃ…ไพ่ต–
go mod tidy
# ๅคๅˆถ็Žฏๅขƒๅ˜้‡ๆ–‡ไปถ
cp .env.example .env
# ็ผ–่พ‘ .env ๆ–‡ไปถ๏ผŒ้…็ฝฎๆ•ฐๆฎๅบ“่ฟžๆŽฅ็ญ‰ไฟกๆฏ# vim .env# ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
make dev
# ๆˆ–็›ดๆŽฅ่ฟ่กŒ
go run ./cmd/server

ไฝฟ็”จ Docker

# ๅฏๅŠจๆ‰€ๆœ‰ๆœๅŠก๏ผˆAPI + PostgreSQL๏ผ‰
make docker-up
# ๆŸฅ็œ‹ๆ—ฅๅฟ—
make docker-logs
# ๅœๆญขๆœๅŠก
make docker-down

ๅฏ็”จๅ‘ฝไปค

make dev # ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
make build # ็ผ–่ฏ‘ไบŒ่ฟ›ๅˆถๆ–‡ไปถ
make run # ็ผ–่ฏ‘ๅนถ่ฟ่กŒ
make test# ่ฟ่กŒๆต‹่ฏ•
make test-coverage # ่ฟ่กŒๆต‹่ฏ•ๅนถ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š
make lint # ่ฟ่กŒไปฃ็ ๆฃ€ๆŸฅ
make tidy # ๆ•ด็† Go ๆจกๅ—ไพ่ต–
make docker-build # ๆž„ๅปบ Docker ้•œๅƒ
make docker-up # ๅฏๅŠจ Docker ๅฎนๅ™จ
make docker-down # ๅœๆญข Docker ๅฎนๅ™จ
make docker-logs # ๆŸฅ็œ‹ Docker ๆ—ฅๅฟ—
make clean # ๆธ…็†ๆž„ๅปบไบง็‰ฉ
make help# ๆ˜พ็คบๅธฎๅŠฉไฟกๆฏ

้กน็›ฎ็ป“ๆž„

halolight-api-go/
โ”œโ”€โ”€ cmd/
โ”‚ โ””โ”€โ”€ server/
โ”‚ โ””โ”€โ”€ main.go # ๅบ”็”จๅ…ฅๅฃ
โ”œโ”€โ”€ internal/
โ”‚ โ”œโ”€โ”€ handlers/ # HTTP ๅค„็†ๅ™จ
โ”‚ โ”‚ โ”œโ”€โ”€ auth_handler.go # ่ฎค่ฏๅค„็†ๅ™จ
โ”‚ โ”‚ โ””โ”€โ”€ user_handler.go # ็”จๆˆทๅค„็†ๅ™จ
โ”‚ โ”œโ”€โ”€ models/ # ๆ•ฐๆฎๆจกๅž‹
โ”‚ โ”‚ โ””โ”€โ”€ user.go # ็”จๆˆทๆจกๅž‹
โ”‚ โ”œโ”€โ”€ services/ # ไธšๅŠก้€ป่พ‘ๅฑ‚
โ”‚ โ”‚ โ”œโ”€โ”€ auth_service.go # ่ฎค่ฏๆœๅŠก
โ”‚ โ”‚ โ””โ”€โ”€ user_service.go # ็”จๆˆทๆœๅŠก
โ”‚ โ”œโ”€โ”€ middleware/ # ไธญ้—ดไปถ
โ”‚ โ”‚ โ”œโ”€โ”€ auth.go # JWT ่ฎค่ฏไธญ้—ดไปถ
โ”‚ โ”‚ โ””โ”€โ”€ cors.go # CORS ไธญ้—ดไปถ
โ”‚ โ”œโ”€โ”€ repository/ # ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚
โ”‚ โ”‚ โ””โ”€โ”€ user_repository.go # ็”จๆˆทๆ•ฐๆฎไป“ๅบ“
โ”‚ โ””โ”€โ”€ routes/ # ่ทฏ็”ฑๅฎšไน‰
โ”‚ โ””โ”€โ”€ router.go # ่ทฏ็”ฑ้…็ฝฎ
โ”œโ”€โ”€ pkg/
โ”‚ โ”œโ”€โ”€ config/ # ้…็ฝฎ็ฎก็†
โ”‚ โ”‚ โ””โ”€โ”€ config.go
โ”‚ โ”œโ”€โ”€ database/ # ๆ•ฐๆฎๅบ“่ฟžๆŽฅ
โ”‚ โ”‚ โ””โ”€โ”€ database.go
โ”‚ โ””โ”€โ”€ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ”‚ โ”œโ”€โ”€ jwt.go # JWT ๅทฅๅ…ท
โ”‚ โ””โ”€โ”€ hash.go # ๅฏ†็ ๅ“ˆๅธŒๅทฅๅ…ท
โ”œโ”€โ”€ .env.example # ็Žฏๅขƒๅ˜้‡็คบไพ‹
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ Dockerfile # Docker ้…็ฝฎ
โ”œโ”€โ”€ docker-compose.yml # Docker Compose ้…็ฝฎ
โ”œโ”€โ”€ Makefile # Make ๅ‘ฝไปค
โ”œโ”€โ”€ go.mod # Go ๆจกๅ—ๅฎšไน‰
โ””โ”€โ”€ README.md

API ็ซฏ็‚น

่ฎค่ฏ (Public)

ๆ–นๆณ•่ทฏๅพ„ๆ่ฟฐ
POST/api/auth/register็”จๆˆทๆณจๅ†Œ
POST/api/auth/login็”จๆˆท็™ปๅฝ•
POST/api/auth/refreshๅˆทๆ–ฐไปค็‰Œ
POST/api/auth/forgot-passwordๅฟ˜่ฎฐๅฏ†็ 
POST/api/auth/reset-password้‡็ฝฎๅฏ†็ 

่ฎค่ฏ (Protected)

ๆ–นๆณ•่ทฏๅพ„ๆ่ฟฐ
GET/api/auth/me่Žทๅ–ๅฝ“ๅ‰็”จๆˆท
POST/api/auth/logout็™ปๅ‡บ

็”จๆˆท็ฎก็† (Protected)

ๆ–นๆณ•่ทฏๅพ„ๆ่ฟฐ
GET/api/users็”จๆˆทๅˆ—่กจ๏ผˆๅˆ†้กต๏ผ‰
GET/api/users/:id็”จๆˆท่ฏฆๆƒ…
POST/api/usersๅˆ›ๅปบ็”จๆˆท
PATCH/api/users/:idๆ›ดๆ–ฐ็”จๆˆท
PATCH/api/users/:id/statusๆ›ดๆ–ฐ็Šถๆ€
POST/api/users/batch-deleteๆ‰น้‡ๅˆ ้™ค
DELETE/api/users/:idๅˆ ้™ค็”จๆˆท

ๅ…ถไป–ๆจกๅ— (Protected)

  • Roles (/api/roles) - ่ง’่‰ฒ CRUD + ๆƒ้™ๅˆ†้…
  • Permissions (/api/permissions) - ๆƒ้™ CRUD
  • Teams (/api/teams) - ๅ›ข้˜Ÿ CRUD + ๆˆๅ‘˜็ฎก็†
  • Documents (/api/documents) - ๆ–‡ๆกฃ CRUD + ๅˆ†ไบซ/ๆ ‡็ญพ
  • Files (/api/files) - ๆ–‡ไปถไธŠไผ /ไธ‹่ฝฝ/็ฎก็†
  • Folders (/api/folders) - ๆ–‡ไปถๅคนๆ ‘ๅฝข็ป“ๆž„
  • Calendar (/api/calendar/events) - ๆ—ฅๅކไบ‹ไปถ็ฎก็†
  • Notifications (/api/notifications) - ้€š็Ÿฅ็ฎก็†
  • Messages (/api/messages) - ๆถˆๆฏไผš่ฏ
  • Dashboard (/api/dashboard) - ็ปŸ่ฎกๆ•ฐๆฎ

ๅฅๅบทๆฃ€ๆŸฅ

ๆ–นๆณ•่ทฏๅพ„ๆ่ฟฐ
GET/healthๅฅๅบทๆฃ€ๆŸฅ

API ็คบไพ‹

ๆณจๅ†Œ

curl -X POST http://localhost:8000/api/auth/register \
-H "Content-Type: application/json" \
-d '{ "email": "user@example.com", "username": "johndoe", "password": "password123" }'

็™ปๅฝ•

curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{ "email": "user@example.com", "password": "password123" }'

่Žทๅ–็”จๆˆทๅˆ—่กจ๏ผˆ้œ€่ฆ่ฎค่ฏ๏ผ‰

curl -X GET http://localhost:8000/api/users?page=1&page_size=20 \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

็Žฏๅขƒๅ˜้‡

ๅ˜้‡ๅ่ฏดๆ˜Ž้ป˜่ฎคๅ€ผ
APP_ENVๅบ”็”จ็Žฏๅขƒdevelopment
APP_PORTๆœๅŠก็ซฏๅฃ8000
JWT_SECRETJWT ๅฏ†้’ฅchange-me-in-production
JWT_EXPIRE_MINUTESJWT ่ฟ‡ๆœŸๆ—ถ้—ด๏ผˆๅˆ†้’Ÿ๏ผ‰60
DB_HOSTๆ•ฐๆฎๅบ“ไธปๆœบlocalhost
DB_PORTๆ•ฐๆฎๅบ“็ซฏๅฃ5432
DB_USERๆ•ฐๆฎๅบ“็”จๆˆทpostgres
DB_PASSWORDๆ•ฐๆฎๅบ“ๅฏ†็ postgres
DB_NAMEๆ•ฐๆฎๅบ“ๅ็งฐhalolight
DB_SSLMODESSL ๆจกๅผdisable

ๆžถๆž„่ฎพ่ฎก

ๅˆ†ๅฑ‚ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ HTTP Handlers โ”‚ โ† ่ฏทๆฑ‚ๅ…ฅๅฃ๏ผŒๅ‚ๆ•ฐ้ชŒ่ฏ
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Services โ”‚ โ† ไธšๅŠก้€ป่พ‘๏ผŒไบ‹ๅŠก็ฎก็†
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Repository โ”‚ โ† ๆ•ฐๆฎ่ฎฟ้—ฎ๏ผŒCRUD ๆ“ไฝœ
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Database (GORM) โ”‚ โ† PostgreSQL
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ฎค่ฏๆต็จ‹

  1. ็”จๆˆท็™ปๅฝ• โ†’ ้ชŒ่ฏๅ‡ญๆฎ
  2. ็”Ÿๆˆ JWT token๏ผˆๅŒ…ๅซ user_id๏ผ‰
  3. ๅฎขๆˆท็ซฏๅœจๅŽ็ปญ่ฏทๆฑ‚ไธญๆบๅธฆ token
  4. AuthMiddleware ้ชŒ่ฏ token
  5. ไปŽ token ๆๅ– user_id ๅนถๆณจๅ…ฅๅˆฐ context
  6. ไธšๅŠก้€ป่พ‘ๅฏ้€š่ฟ‡ context ่Žทๅ–ๅฝ“ๅ‰็”จๆˆท

ๅผ€ๅ‘ๆŒ‡ๅ—

ๆทปๅŠ ๆ–ฐ็š„ API ็ซฏ็‚น

  1. ๅฎšไน‰ๆจกๅž‹ (internal/models/)
  2. ๅˆ›ๅปบ Repository (internal/repository/)
  3. ๅฎž็Žฐ Service (internal/services/)
  4. ๆทปๅŠ  Handler (internal/handlers/)
  5. ๆณจๅ†Œ่ทฏ็”ฑ (internal/routes/router.go)

่ฟ่กŒๆต‹่ฏ•

# ่ฟ่กŒๆ‰€ๆœ‰ๆต‹่ฏ•
make test# ่ฟ่กŒๆต‹่ฏ•ๅนถ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š
make test-coverage
# ๆŸฅ็œ‹่ฆ†็›–็އๆŠฅๅ‘Š๏ผˆไผšๅœจๆต่งˆๅ™จๆ‰“ๅผ€๏ผ‰
open coverage.html

ไปฃ็ ่ง„่Œƒ

# ๆ ผๅผๅŒ–ไปฃ็ 
go fmt ./...
# ่ฟ่กŒ linter๏ผˆ้œ€่ฆๅฎ‰่ฃ… golangci-lint๏ผ‰
make lint

้ƒจ็ฝฒ

Docker ้ƒจ็ฝฒ

# ๆž„ๅปบ้•œๅƒ
make docker-build
# ไฝฟ็”จ docker-compose ๅฏๅŠจ
make docker-up

ไบŒ่ฟ›ๅˆถ้ƒจ็ฝฒ

# ็ผ–่ฏ‘็”Ÿไบง็‰ˆๆœฌ
make build
# ่ฟ่กŒไบŒ่ฟ›ๅˆถ
./bin/halolight-api

็Žฏๅขƒๅ˜้‡้…็ฝฎ

็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎ้€š่ฟ‡็ณป็ปŸ็Žฏๅขƒๅ˜้‡ๆˆ–้…็ฝฎ็ฎก็†ๅทฅๅ…ท๏ผˆๅฆ‚ Kubernetes ConfigMap/Secret๏ผ‰ๆณจๅ…ฅ้…็ฝฎ๏ผŒ่€Œไธๆ˜ฏไฝฟ็”จ .env ๆ–‡ไปถใ€‚

ๅฎ‰ๅ…จๆœ€ไฝณๅฎž่ทต

  • โœ… ๅฏ†็ ไฝฟ็”จ bcrypt ๅ“ˆๅธŒ๏ผˆcost=10๏ผ‰
  • โœ… JWT ็ญพๅ้ชŒ่ฏ๏ผˆHS256๏ผ‰
  • โœ… CORS ไธญ้—ดไปถ้…็ฝฎ
  • โœ… ่พ“ๅ…ฅ้ชŒ่ฏ๏ผˆGin binding๏ผ‰
  • โœ… SQL ๆณจๅ…ฅ้˜ฒๆŠค๏ผˆGORM ๅ‚ๆ•ฐๅŒ–ๆŸฅ่ฏข๏ผ‰
  • โœ… ้”™่ฏฏไฟกๆฏไธๆณ„้œฒๆ•ๆ„Ÿๆ•ฐๆฎ
  • โš ๏ธ ็”Ÿไบง็ŽฏๅขƒๅŠกๅฟ…ไฟฎๆ”น JWT_SECRET
  • โš ๏ธ ็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎไฝฟ็”จ HTTPS
  • โš ๏ธ ่€ƒ่™‘ๆทปๅŠ ้€Ÿ็އ้™ๅˆถไธญ้—ดไปถ

ๆ€ง่ƒฝ

  • ๅนถๅ‘ๅค„็†: Gin ๅŸบไบŽ goroutine๏ผŒๆ”ฏๆŒ้ซ˜ๅนถๅ‘
  • ๆ•ฐๆฎๅบ“่ฟžๆŽฅๆฑ : GORM ่‡ชๅŠจ็ฎก็†่ฟžๆŽฅๆฑ 
  • ๅ†…ๅญ˜ๅ ็”จ: ~20-30MB๏ผˆ็ฉบ่ฝฝ๏ผ‰
  • ๅ“ๅบ”ๆ—ถ้—ด: < 10ms (P99, ๆ— ๆ•ฐๆฎๅบ“ๆŸฅ่ฏข)

ๆ•…้šœๆŽ’ๆŸฅ

ๅธธ่ง้—ฎ้ข˜

้—ฎ้ข˜: ๆ— ๆณ•่ฟžๆŽฅๆ•ฐๆฎๅบ“

# ๆฃ€ๆŸฅ PostgreSQL ๆ˜ฏๅฆ่ฟ่กŒ
docker-compose ps
# ๆŸฅ็œ‹ๆ•ฐๆฎๅบ“ๆ—ฅๅฟ—
docker-compose logs db

้—ฎ้ข˜: JWT token ๆ— ๆ•ˆ

  • ็กฎ่ฎค JWT_SECRET ้…็ฝฎๆญฃ็กฎ
  • ๆฃ€ๆŸฅ token ๆ˜ฏๅฆ่ฟ‡ๆœŸ
  • ้ชŒ่ฏ Authorization header ๆ ผๅผ: Bearer <token>

้—ฎ้ข˜: ไพ่ต–ไธ‹่ฝฝๅคฑ่ดฅ

# ่ฎพ็ฝฎ Go ไปฃ็†๏ผˆไธญๅ›ฝ็”จๆˆท๏ผ‰export GOPROXY=https://goproxy.cn,direct
# ้‡ๆ–ฐไธ‹่ฝฝ
go mod tidy

็›ธๅ…ณ้“พๆŽฅ

่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ

่ฎธๅฏ่ฏ

MIT


Made with โค๏ธ by HaloLight Team

About

๐Ÿน Go ๅŽ็ซฏ API Backend - Gin/Fiber, JWT Auth, RBAC ๆƒ้™, PostgreSQL, Redis, Swagger ๆ–‡ๆกฃ โ†’ halolight-api-go.h7ml.cn

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages