use the goverter:ignore directive to ignore fields in the generated code. This is useful when you want to ignore certain fields in the generated code.
This commit is contained in:
parent
fb44efec56
commit
97e29ff94d
|
@ -9,10 +9,11 @@ import (
|
||||||
// goverter:extend BoolToInt32
|
// goverter:extend BoolToInt32
|
||||||
type Converter interface {
|
type Converter interface {
|
||||||
// goverter:map Nsfw NSFW
|
// goverter:map Nsfw NSFW
|
||||||
// goverter:ignore CreatedAt
|
// goverter:ignore CreatedAt UpdatedAt R
|
||||||
// goverter:ignore UpdatedAt
|
CreateDeviceRequestToModelsDevice(source *device.CreateDeviceRequest) *models.Device
|
||||||
// goverter:ignore R
|
|
||||||
ConvertCreateDeviceRequestToModelsDevice(source device.CreateDeviceRequest) *models.Device
|
// goverter:ignore state sizeCache unknownFields
|
||||||
|
ModelsDeviceToCreateDeviceResponse(source *models.Device) *device.CreateDeviceResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
func BoolToInt32(input bool) int32 {
|
func BoolToInt32(input bool) int32 {
|
||||||
|
|
|
@ -3,6 +3,8 @@ package errs
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"connectrpc.com/connect"
|
||||||
)
|
)
|
||||||
|
|
||||||
func FindCodeOrDefault(err error, def int) int {
|
func FindCodeOrDefault(err error, def int) int {
|
||||||
|
@ -25,6 +27,29 @@ func FindCodeOrDefault(err error, def int) int {
|
||||||
return def
|
return def
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExtractConnectCode(err error) connect.Code {
|
||||||
|
code := FindCodeOrDefault(err, 500)
|
||||||
|
if code >= 500 {
|
||||||
|
return connect.CodeInternal
|
||||||
|
}
|
||||||
|
switch code {
|
||||||
|
case http.StatusNotFound:
|
||||||
|
return connect.CodeNotFound
|
||||||
|
case http.StatusConflict:
|
||||||
|
return connect.CodeAlreadyExists
|
||||||
|
case http.StatusBadRequest:
|
||||||
|
return connect.CodeInvalidArgument
|
||||||
|
case http.StatusForbidden:
|
||||||
|
return connect.CodePermissionDenied
|
||||||
|
case http.StatusFailedDependency:
|
||||||
|
return connect.CodeUnavailable
|
||||||
|
case http.StatusTooManyRequests:
|
||||||
|
return connect.CodeResourceExhausted
|
||||||
|
default:
|
||||||
|
return connect.CodeUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func FindMessage(err error) string {
|
func FindMessage(err error) string {
|
||||||
if messager, ok := err.(interface{ GetMessage() string }); ok {
|
if messager, ok := err.(interface{ GetMessage() string }); ok {
|
||||||
message := messager.GetMessage()
|
message := messager.GetMessage()
|
||||||
|
|
|
@ -4,12 +4,25 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"connectrpc.com/connect"
|
"connectrpc.com/connect"
|
||||||
|
"github.com/bufbuild/protovalidate-go"
|
||||||
"github.com/tigorlazuardi/redmage/api"
|
"github.com/tigorlazuardi/redmage/api"
|
||||||
|
"github.com/tigorlazuardi/redmage/gen/converter"
|
||||||
device "github.com/tigorlazuardi/redmage/gen/proto/device/v1"
|
device "github.com/tigorlazuardi/redmage/gen/proto/device/v1"
|
||||||
deviceConnect "github.com/tigorlazuardi/redmage/gen/proto/device/v1/v1connect"
|
deviceConnect "github.com/tigorlazuardi/redmage/gen/proto/device/v1/v1connect"
|
||||||
|
"github.com/tigorlazuardi/redmage/pkg/errs"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ deviceConnect.DeviceServiceHandler = (*Device)(nil)
|
var (
|
||||||
|
_ deviceConnect.DeviceServiceHandler = (*Device)(nil)
|
||||||
|
convert converter.ConverterImpl
|
||||||
|
validator = func() *protovalidate.Validator {
|
||||||
|
v, err := protovalidate.New()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}()
|
||||||
|
)
|
||||||
|
|
||||||
type Device struct {
|
type Device struct {
|
||||||
deviceConnect.UnimplementedDeviceServiceHandler
|
deviceConnect.UnimplementedDeviceServiceHandler
|
||||||
|
@ -21,5 +34,18 @@ func (de *Device) CreateDevice(ctx context.Context, req *connect.Request[device.
|
||||||
ctx, span := tracer.Start(ctx, "Device.CreateDevice")
|
ctx, span := tracer.Start(ctx, "Device.CreateDevice")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
panic("not implemented") // TODO: Implement
|
if err := validator.Validate(req.Msg); err != nil {
|
||||||
|
return nil, connect.NewError(connect.CodeInvalidArgument, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
requestDao := convert.CreateDeviceRequestToModelsDevice(req.Msg)
|
||||||
|
|
||||||
|
dev, err := de.API.DevicesCreate(ctx, requestDao)
|
||||||
|
if err != nil {
|
||||||
|
code := errs.ExtractConnectCode(err)
|
||||||
|
return nil, connect.NewError(code, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
createResponse := convert.ModelsDeviceToCreateDeviceResponse(dev)
|
||||||
|
return connect.NewResponse(createResponse), nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue