feat: 删除冗余的 README 和 Git keep 文件,添加 demo.go 模板和完整的配置文件
This commit is contained in:
@@ -1,31 +0,0 @@
|
|||||||
```
|
|
||||||
PositionPath = "path"
|
|
||||||
PositionQuery= "query"
|
|
||||||
PositionBody = "body"
|
|
||||||
PositionHeader = "header"
|
|
||||||
PositionCookie = "cookie"
|
|
||||||
PositionLocal = "local"
|
|
||||||
PositionFile = "file"
|
|
||||||
```
|
|
||||||
|
|
||||||
@Bind 语法
|
|
||||||
```
|
|
||||||
@Bind name position key() table() model()
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
// Upload
|
|
||||||
// @Router /v1/medias/upload [post]
|
|
||||||
// @Bind req body
|
|
||||||
// @Bind file file
|
|
||||||
// @Bind claim local
|
|
||||||
func (ctl *Controller) Upload(ctx fiber.Ctx, claim *jwt.Claims, file *multipart.FileHeader, req *UploadReq) (*storage.UploadedFile, error) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Jet import for Pg
|
|
||||||
```
|
|
||||||
. "github.com/go-jet/jet/v2/postgres"
|
|
||||||
"github.com/go-jet/jet/v2/qrm"
|
|
||||||
```
|
|
||||||
68
templates/project/app/http/v1/demo.go.tpl
Normal file
68
templates/project/app/http/v1/demo.go.tpl
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"mime/multipart"
|
||||||
|
|
||||||
|
"{{.ModuleName}}/app/errorx"
|
||||||
|
"{{.ModuleName}}/app/services"
|
||||||
|
"{{.ModuleName}}/providers/jwt"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
// @provider
|
||||||
|
type demo struct{}
|
||||||
|
|
||||||
|
type FooUploadReq struct {
|
||||||
|
Folder string `json:"folder" form:"folder"` // 上传到指定文件夹
|
||||||
|
}
|
||||||
|
|
||||||
|
type FooQuery struct {
|
||||||
|
Search string `query:"search"` // 搜索关键词
|
||||||
|
}
|
||||||
|
|
||||||
|
type FooHeader struct {
|
||||||
|
ContentType string `header:"Content-Type"` // 内容类型
|
||||||
|
}
|
||||||
|
|
||||||
|
// Foo
|
||||||
|
//
|
||||||
|
// @Summary Test
|
||||||
|
// @Description Test
|
||||||
|
// @Tags Test
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param id path int true "ID"
|
||||||
|
// @Param queryFilter query dto.Filter true "Filter"
|
||||||
|
// @Param pageFilter query request.PageQueryFilter true "Pager"
|
||||||
|
// @Param sortFilter query request.SortQueryFilter true "Sorter"
|
||||||
|
// @Success 200 {object} request.PageDataResponse{list=DataModel} "成功"
|
||||||
|
//
|
||||||
|
// @Router /v1/medias/:id [post]
|
||||||
|
// @Bind query query
|
||||||
|
// @Bind header header
|
||||||
|
// @Bind id path
|
||||||
|
// @Bind req body
|
||||||
|
// @Bind file file
|
||||||
|
// @Bind claim local
|
||||||
|
func (d *demo) Foo(
|
||||||
|
ctx fiber.Ctx,
|
||||||
|
id int,
|
||||||
|
query *FooQuery,
|
||||||
|
header *FooHeader,
|
||||||
|
claim *jwt.Claims,
|
||||||
|
file *multipart.FileHeader,
|
||||||
|
req *FooUploadReq,
|
||||||
|
) error {
|
||||||
|
_, err := services.Class.First(ctx)
|
||||||
|
if err != nil {
|
||||||
|
// 示例:在控制器层自定义错误消息/附加数据
|
||||||
|
appErr := errorx.Wrap(err).
|
||||||
|
WithMsg("获取班级失败").
|
||||||
|
WithData(fiber.Map{"route": "/v1/test"}).
|
||||||
|
WithParams("handler", "Test.Hello")
|
||||||
|
return appErr
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
239
templates/project/config.full.toml.raw
Normal file
239
templates/project/config.full.toml.raw
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
# =========================
|
||||||
|
# gRPC Server (providers/grpc)
|
||||||
|
# =========================
|
||||||
|
[Grpc]
|
||||||
|
# 必填
|
||||||
|
Port = 9090 # gRPC 监听端口
|
||||||
|
# 可选
|
||||||
|
# Host = "0.0.0.0" # 监听地址(默认 0.0.0.0)
|
||||||
|
EnableReflection = true # 开启服务反射(开发/调试友好)
|
||||||
|
EnableHealth = true # 注册 gRPC health 服务
|
||||||
|
ShutdownTimeoutSeconds = 10 # 优雅关停超时,超时后强制 Stop
|
||||||
|
|
||||||
|
# 说明:
|
||||||
|
# - 统一的拦截器、ServerOption 可通过 providers/grpc/options.go 的
|
||||||
|
# UseUnaryInterceptors/UseStreamInterceptors/UseOptions 动态注入。
|
||||||
|
# =========================
|
||||||
|
# HTTP Server (providers/http)
|
||||||
|
# =========================
|
||||||
|
[Http]
|
||||||
|
# 必填
|
||||||
|
Port = 8080 # HTTP 监听端口
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
# BaseURI = "/api" # 全局前缀
|
||||||
|
# StaticRoute = "/static" # 静态路由路径
|
||||||
|
# StaticPath = "./public" # 静态文件目录
|
||||||
|
[Http.Tls]
|
||||||
|
|
||||||
|
# Cert = "server.crt"
|
||||||
|
# Key = "server.key"
|
||||||
|
[Http.Cors]
|
||||||
|
|
||||||
|
# Mode = "enabled" # "enabled"|"disabled"(默认按 Whitelist 推断)
|
||||||
|
# 白名单项示例(按需追加多条)
|
||||||
|
# [[Http.Cors.Whitelist]]
|
||||||
|
# AllowOrigin = "https://example.com"
|
||||||
|
# AllowHeaders = "Authorization,Content-Type"
|
||||||
|
# AllowMethods = "GET,POST,PUT,DELETE"
|
||||||
|
# ExposeHeaders = "X-Request-Id"
|
||||||
|
# AllowCredentials = true
|
||||||
|
# =========================
|
||||||
|
# Connection Multiplexer (providers/cmux)
|
||||||
|
# 用于同端口同时暴露 HTTP + gRPC:cmux -> 分发到 Http/Grpc
|
||||||
|
# =========================
|
||||||
|
[Cmux]
|
||||||
|
# 必填
|
||||||
|
Port = 8081 # cmux 监听端口
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
# Host = "0.0.0.0"
|
||||||
|
# =========================
|
||||||
|
# Events / PubSub (providers/event)
|
||||||
|
# gochannel 为默认内存通道(始终启用)
|
||||||
|
# 如需 Kafka / Redis Stream / SQL,请按需开启对应小节
|
||||||
|
# =========================
|
||||||
|
[Events]
|
||||||
|
|
||||||
|
# Kafka(可选)
|
||||||
|
[Events.Kafka]
|
||||||
|
# 必填(启用时)
|
||||||
|
Brokers = ["127.0.0.1:9092"]
|
||||||
|
# 可选
|
||||||
|
ConsumerGroup = "my-group"
|
||||||
|
|
||||||
|
# Redis Stream(可选)
|
||||||
|
[Events.Redis]
|
||||||
|
# 必填(启用时)
|
||||||
|
ConsumerGroup = "my-group"
|
||||||
|
# 可选
|
||||||
|
Streams = ["mystream"] # 订阅的 streams;可在 Handler 侧具体指定
|
||||||
|
|
||||||
|
# SQL(可选,基于 PostgreSQL)
|
||||||
|
[Events.Sql]
|
||||||
|
# 必填(启用时)
|
||||||
|
ConsumerGroup = "my-group"
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Job / Queue (providers/job)
|
||||||
|
# 基于 River(Postgres)队列
|
||||||
|
# =========================
|
||||||
|
[Job]
|
||||||
|
|
||||||
|
# 可选:每队列并发数(默认 high/default/low 均 10)
|
||||||
|
#QueueWorkers = { high = 20, default = 10, low = 5 }
|
||||||
|
# 说明:
|
||||||
|
# - 需要启用 providers/postgres 以提供数据库连接
|
||||||
|
# - 通过 Add/AddWithID 入队,AddPeriodicJob 注册定时任务
|
||||||
|
# =========================
|
||||||
|
# JWT (providers/jwt)
|
||||||
|
# =========================
|
||||||
|
[JWT]
|
||||||
|
# 必填
|
||||||
|
SigningKey = "your-signing-key" # 密钥
|
||||||
|
ExpiresTime = "168h" # 过期时间,形如 "72h", "168h"
|
||||||
|
# 可选
|
||||||
|
Issuer = "my-service"
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# HashIDs (providers/hashids)
|
||||||
|
# =========================
|
||||||
|
[HashIDs]
|
||||||
|
# 必填
|
||||||
|
Salt = "your-salt"
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
# Alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
|
||||||
|
# MinLength = 8
|
||||||
|
# =========================
|
||||||
|
# Redis (providers/redis)
|
||||||
|
# =========================
|
||||||
|
[Redis]
|
||||||
|
# 必填(若不填 Host/Port,将默认 localhost:6379)
|
||||||
|
Host = "127.0.0.1"
|
||||||
|
Port = 6379
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
# Username = ""
|
||||||
|
# Password = ""
|
||||||
|
# DB = 0
|
||||||
|
# ClientName = "my-service"
|
||||||
|
# 连接池/重试(可选)
|
||||||
|
# PoolSize = 50
|
||||||
|
# MinIdleConns = 10
|
||||||
|
# MaxRetries = 2
|
||||||
|
# 超时(秒,可选)
|
||||||
|
# DialTimeoutSeconds = 5
|
||||||
|
# ReadTimeoutSeconds = 3
|
||||||
|
# WriteTimeoutSeconds = 3
|
||||||
|
# 连接生命周期(秒,可选)
|
||||||
|
# ConnMaxIdleTimeSeconds = 300
|
||||||
|
# ConnMaxLifetimeSeconds = 1800
|
||||||
|
# 探活(秒,可选,默认 5)
|
||||||
|
# PingTimeoutSeconds = 5
|
||||||
|
# =========================
|
||||||
|
# PostgreSQL / GORM (providers/postgres)
|
||||||
|
# =========================
|
||||||
|
[Database]
|
||||||
|
# 必填
|
||||||
|
Host = "127.0.0.1"
|
||||||
|
Port = 5432
|
||||||
|
Database = "app"
|
||||||
|
|
||||||
|
# 可选(未填 Username 默认 postgres;其它有默认值见代码)
|
||||||
|
# Username = "postgres"
|
||||||
|
# Password = ""
|
||||||
|
# SslMode = "disable" # "disable"|"require"|...
|
||||||
|
# TimeZone = "Asia/Shanghai"
|
||||||
|
# Schema = "public"
|
||||||
|
# Prefix = "" # 表前缀
|
||||||
|
# Singular = false # 表名是否使用单数
|
||||||
|
# 连接池(可选)
|
||||||
|
# MaxIdleConns = 10
|
||||||
|
# MaxOpenConns = 100
|
||||||
|
# ConnMaxLifetimeSeconds = 1800
|
||||||
|
# ConnMaxIdleTimeSeconds = 300
|
||||||
|
# DSN 增强(可选)
|
||||||
|
# UseSearchPath = true
|
||||||
|
# ApplicationName = "my-service"
|
||||||
|
# =========================
|
||||||
|
# HTTP Client (providers/req)
|
||||||
|
# =========================
|
||||||
|
[HttpClient]
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
# DevMode = true
|
||||||
|
# CookieJarFile = "./data/cookies.jar"
|
||||||
|
# RootCa = ["./ca.crt"]
|
||||||
|
# UserAgent = "my-service/1.0"
|
||||||
|
# InsecureSkipVerify = false
|
||||||
|
# BaseURL = "https://api.example.com"
|
||||||
|
# ContentType = "application/json"
|
||||||
|
# Timeout = 10 # 秒
|
||||||
|
# CommonHeaders = { X-Request-From = "service" }
|
||||||
|
# CommonQuery = { locale = "zh-CN" }
|
||||||
|
[HttpClient.AuthBasic]
|
||||||
|
|
||||||
|
# Username = ""
|
||||||
|
# Password = ""
|
||||||
|
# 其它认证 / 代理 / 跳转策略(可选)
|
||||||
|
# AuthBearerToken = "Bearer <token>" # 或仅 <token>,内部会设置 Bearer
|
||||||
|
# ProxyURL = "http://127.0.0.1:7890"
|
||||||
|
# RedirectPolicy = ["Max:10","SameHost"]
|
||||||
|
# =========================
|
||||||
|
# OpenTracing (Jaeger) (providers/tracing)
|
||||||
|
# =========================
|
||||||
|
[Tracing]
|
||||||
|
# 必填
|
||||||
|
Name = "my-service"
|
||||||
|
# 可选(Agent / Collector 至少配一个;未配时走默认本地端口)
|
||||||
|
Reporter_LocalAgentHostPort = "127.0.0.1:6831"
|
||||||
|
Reporter_CollectorEndpoint = "http://127.0.0.1:14268/api/traces"
|
||||||
|
|
||||||
|
# 行为开关(可选)
|
||||||
|
# Disabled = false
|
||||||
|
# Gen128Bit = true
|
||||||
|
# ZipkinSharedRPCSpan = true
|
||||||
|
# RPCMetrics = false
|
||||||
|
# 采样器(可选)
|
||||||
|
# Sampler_Type = "const" # const|probabilistic|ratelimiting|remote
|
||||||
|
# Sampler_Param = 1.0
|
||||||
|
# Sampler_SamplingServerURL = ""
|
||||||
|
# Sampler_MaxOperations = 0
|
||||||
|
# Sampler_RefreshIntervalSec = 0
|
||||||
|
# Reporter(可选)
|
||||||
|
# Reporter_LogSpans = true
|
||||||
|
# Reporter_BufferFlushMs = 100
|
||||||
|
# Reporter_QueueSize = 1000
|
||||||
|
# 进程 Tags(可选)
|
||||||
|
# [Tracing.Tags]
|
||||||
|
# version = "1.0.0"
|
||||||
|
# zone = "az1"
|
||||||
|
# =========================
|
||||||
|
# OpenTelemetry (providers/otel)
|
||||||
|
# =========================
|
||||||
|
[OTEL]
|
||||||
|
# 必填(建议设置)
|
||||||
|
ServiceName = "my-service"
|
||||||
|
# 可选(版本/环境)
|
||||||
|
Version = "1.0.0"
|
||||||
|
Env = "dev"
|
||||||
|
# 导出端点(二选一,若都填优先 HTTP)
|
||||||
|
# EndpointGRPC = "127.0.0.1:4317"
|
||||||
|
# EndpointHTTP = "127.0.0.1:4318"
|
||||||
|
# 认证(可选,支持仅填纯 token,将自动补齐 Bearer)
|
||||||
|
# Token = "Bearer <token>"
|
||||||
|
# 安全(可选)
|
||||||
|
# InsecureGRPC = true
|
||||||
|
# InsecureHTTP = true
|
||||||
|
# 采样(可选)
|
||||||
|
# Sampler = "always" # "always"|"ratio"
|
||||||
|
# SamplerRatio = 0.1 # 0..1,仅当 Sampler="ratio" 生效
|
||||||
|
# 批处理(毫秒,可选)
|
||||||
|
# BatchTimeoutMs = 5000
|
||||||
|
# ExportTimeoutMs = 10000
|
||||||
|
# MaxQueueSize = 2048
|
||||||
|
# MaxExportBatchSize = 512
|
||||||
|
# 指标(毫秒,可选)
|
||||||
|
# MetricReaderIntervalMs = 10000 # 指标导出周期
|
||||||
|
# RuntimeReadMemStatsIntervalMs = 5000 # 运行时指标采集最小周期
|
||||||
Reference in New Issue
Block a user