feat: release managed service generation and contract diagnostics
This commit is contained in:
22
examples/managedService/internal/logic/demo/callback.go
Normal file
22
examples/managedService/internal/logic/demo/callback.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
omnierrors "git.yuntuo.hk/k2safe/go-omni/errors"
|
||||
"git.yuntuo.hk/k2safe/go-omni/httpx"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (l *Logic) Callback(ctx context.Context, body *httpx.Body) (*httpx.Stream, error) {
|
||||
// The route's 64-byte limit bounds this example's memory use. A real signature
|
||||
// implementation can hash body.Raw incrementally and authenticate its headers.
|
||||
data, err := io.ReadAll(body.Raw)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if body.Header.Get("X-Signature") != "valid" {
|
||||
return nil, omnierrors.ByCode("INVALID")
|
||||
}
|
||||
return &httpx.Stream{Content: io.NopCloser(strings.NewReader("ACK:" + string(data)))}, nil
|
||||
}
|
||||
20
examples/managedService/internal/logic/demo/check.go
Normal file
20
examples/managedService/internal/logic/demo/check.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"example.com/managed/internal/types"
|
||||
omnierrors "git.yuntuo.hk/k2safe/go-omni/errors"
|
||||
)
|
||||
|
||||
func (l *Logic) Check(ctx context.Context, req *types.CheckReq) (*types.Receipt, error) {
|
||||
switch req.Kind {
|
||||
case "fixed":
|
||||
return nil, omnierrors.ByCode("INVALID")
|
||||
case "params":
|
||||
return nil, omnierrors.ByCode("TOO_LONG").WithParams(map[string]any{"label": "企业名称", "max": 100})
|
||||
case "unknown":
|
||||
return nil, omnierrors.ByCode("UNKNOWN").WithCause(errors.New("private cause"))
|
||||
}
|
||||
return &types.Receipt{Bytes: 42}, nil
|
||||
}
|
||||
12
examples/managedService/internal/logic/demo/download.go
Normal file
12
examples/managedService/internal/logic/demo/download.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"git.yuntuo.hk/k2safe/go-omni/httpx"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (l *Logic) Download(context.Context) (*httpx.Stream, error) {
|
||||
return &httpx.Stream{Content: io.NopCloser(strings.NewReader("file-content")), Name: "example.txt"}, nil
|
||||
}
|
||||
7
examples/managedService/internal/logic/demo/logic.go
Normal file
7
examples/managedService/internal/logic/demo/logic.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package demo
|
||||
|
||||
import "example.com/managed/internal/svc"
|
||||
|
||||
type Logic struct{ deps *svc.ServiceContext }
|
||||
|
||||
func New(deps *svc.ServiceContext) *Logic { return &Logic{deps: deps} }
|
||||
10
examples/managedService/internal/logic/demo/other.go
Normal file
10
examples/managedService/internal/logic/demo/other.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"example.com/managed/internal/types"
|
||||
)
|
||||
|
||||
func (l *Logic) Other(ctx context.Context, req *types.CheckReq) (*types.Receipt, error) {
|
||||
return l.Check(ctx, req)
|
||||
}
|
||||
10
examples/managedService/internal/logic/demo/rawJSON.go
Normal file
10
examples/managedService/internal/logic/demo/rawJSON.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"example.com/managed/internal/types"
|
||||
)
|
||||
|
||||
func (l *Logic) RawJSON(context.Context) (*types.Receipt, error) {
|
||||
return &types.Receipt{Bytes: 3}, nil
|
||||
}
|
||||
16
examples/managedService/internal/logic/demo/slow.go
Normal file
16
examples/managedService/internal/logic/demo/slow.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"example.com/managed/internal/types"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (l *Logic) Slow(ctx context.Context) (*types.Receipt, error) {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil, ctx.Err()
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
return &types.Receipt{Bytes: 1}, nil
|
||||
}
|
||||
}
|
||||
31
examples/managedService/internal/logic/demo/upload.go
Normal file
31
examples/managedService/internal/logic/demo/upload.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"example.com/managed/internal/types"
|
||||
"git.yuntuo.hk/k2safe/go-omni/httpx"
|
||||
"io"
|
||||
)
|
||||
|
||||
func (l *Logic) Upload(ctx context.Context, body *httpx.Body) (*types.Receipt, error) {
|
||||
var total int64
|
||||
for {
|
||||
part, err := body.Parts.NextPart()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n, err := io.Copy(io.Discard, part)
|
||||
closeErr := part.Close()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if closeErr != nil {
|
||||
return nil, closeErr
|
||||
}
|
||||
total += n
|
||||
}
|
||||
return &types.Receipt{Bytes: total}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user