From fb44efec562479639852cfa59382040261a507da Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Sun, 4 Aug 2024 20:18:54 +0700 Subject: [PATCH] major step to connectrpc --- Makefile | 4 +- converts/converts.go | 23 +++++++++ flake.nix | 25 ++++++++++ go.mod | 8 +++- go.sum | 18 ++++++- main.go | 2 + proto/buf.gen.yaml | 4 +- proto/buf.lock | 6 +++ proto/buf.yaml | 2 + proto/device/v1/device.proto | 88 ++++++++++++++++++++++++++++++++++ proto/redmage/redmage.proto | 25 ---------- server/grpc/grpc.go | 3 ++ server/grpc/handlers/device.go | 25 ++++++++++ server/grpc/handlers/trace.go | 5 ++ tools/connectrpc.go | 5 ++ tools/grpc.go | 1 - tools/protobuf.go | 7 +++ 17 files changed, 219 insertions(+), 32 deletions(-) create mode 100644 converts/converts.go create mode 100644 proto/buf.lock create mode 100644 proto/device/v1/device.proto delete mode 100644 proto/redmage/redmage.proto create mode 100644 server/grpc/grpc.go create mode 100644 server/grpc/handlers/device.go create mode 100644 server/grpc/handlers/trace.go create mode 100644 tools/connectrpc.go delete mode 100644 tools/grpc.go create mode 100644 tools/protobuf.go diff --git a/Makefile b/Makefile index 730e0f3..3f65099 100644 --- a/Makefile +++ b/Makefile @@ -15,9 +15,11 @@ export REDMAGE_RUNTIME_VERSION=$(shell echo "$${REDMAGE_RUNTIME_VERSION:-unknown export GCO_ENABLED=0 generate: - rm -rf ./gen/grpc + rm -rf ./gen cd proto buf generate + cd .. + goverter gen -g 'output:file ../gen/converter/generated.go' -g 'output:package github.com/tigorlazuardi/redmage/gen/converter' ./converts start: dev-dependencies web-dependencies migrate-up REDMAGE_RUNTIME_VERSION=$(shell git describe --tags --abbrev=0) air diff --git a/converts/converts.go b/converts/converts.go new file mode 100644 index 0000000..973c372 --- /dev/null +++ b/converts/converts.go @@ -0,0 +1,23 @@ +package main + +import ( + device "github.com/tigorlazuardi/redmage/gen/proto/device/v1" + "github.com/tigorlazuardi/redmage/models" +) + +// goverter:converter +// goverter:extend BoolToInt32 +type Converter interface { + // goverter:map Nsfw NSFW + // goverter:ignore CreatedAt + // goverter:ignore UpdatedAt + // goverter:ignore R + ConvertCreateDeviceRequestToModelsDevice(source device.CreateDeviceRequest) *models.Device +} + +func BoolToInt32(input bool) int32 { + if input { + return 1 + } + return 0 +} diff --git a/flake.nix b/flake.nix index 35c6d07..74dad43 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,29 @@ system = "x86_64-linux"; templPkg = templ.packages.${system}.templ; pkgs = inputs.nixpkgs.legacyPackages.${system}; + goverter = pkgs.buildGoModule rec { + name = "goverter"; + version = "1.5.0"; + src = pkgs.fetchFromGitHub { + owner = "jmattheis"; + repo = "goverter"; + rev = "v${version}"; + sha256 = "sha256-J0PS4ZxGtOa+0QOOSjfg0WeVYGyf757WuTnpQTWIV1w="; + }; + nativeBuildInputs = [ pkgs.go ]; + buildPhase = '' + runHook preBuild + go build -o goverter ./cmd/goverter + runHook postBuild + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/bin + cp goverter $out/bin + runHook postInstall + ''; + vendorHash = "sha256-uQ1qKZLRwsgXKqSAERSqf+1cYKp6MTeVbfGs+qcdakE="; + }; in { devShell.${system} = pkgs.mkShell { @@ -26,6 +49,8 @@ protoc-gen-go protoc-gen-go-grpc protoc-gen-connect-go + protoc-gen-validate + goverter ]; }; }; diff --git a/go.mod b/go.mod index 764fedd..1053b6e 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,15 @@ module github.com/tigorlazuardi/redmage go 1.22.1 require ( + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 + connectrpc.com/connect v1.16.2 github.com/ThreeDotsLabs/watermill v1.3.5 github.com/ThreeDotsLabs/watermill-bolt v1.1.0 github.com/a-h/templ v0.2.663 github.com/aarondl/opt v0.0.0-20240108180805-338d04d857dc github.com/adrg/xdg v0.4.0 github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 + github.com/bufbuild/protovalidate-go v0.6.3 github.com/fatih/color v1.16.0 github.com/go-chi/chi/v5 v5.0.12 github.com/gosimple/slug v1.14.0 @@ -35,12 +38,15 @@ require ( github.com/tidwall/pretty v1.2.1 go.etcd.io/bbolt v1.3.9 golang.org/x/net v0.24.0 + google.golang.org/protobuf v1.34.2 ) require ( github.com/aarondl/json v0.0.0-20221020222930-8b0db17ef1bf // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/boreq/errors v0.1.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/google/cel-go v0.20.1 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gosimple/unidecode v1.0.1 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect @@ -50,6 +56,7 @@ require ( github.com/qdm12/reprint v0.0.0-20200326205758-722754a53494 // indirect github.com/samber/lo v1.39.0 // indirect github.com/stephenafamo/scan v0.5.0 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect go.opentelemetry.io/proto/otlp v1.2.0 // indirect golang.org/x/image v0.15.0 // indirect @@ -57,7 +64,6 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.33.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 1380d04..088a526 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -31,6 +33,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +connectrpc.com/connect v1.16.2 h1:ybd6y+ls7GOlb7Bh5C8+ghA6SvCBajHwxssO2CGFjqE= +connectrpc.com/connect v1.16.2/go.mod h1:n2kgwskMHXC+lVqb18wngEpF95ldBHXjZYJussz5FRc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -64,11 +68,15 @@ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4 github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/boreq/errors v0.1.0 h1:aJIXv9JnyR5KtxFpQ8/AiblH3nfYmr1e1yoTze/5A1k= github.com/boreq/errors v0.1.0/go.mod h1:B3dsXzhYvfgUXp7ViU/moPYM4PojgQ9MiQ21uvY6qqQ= +github.com/bufbuild/protovalidate-go v0.6.3 h1:wxQyzW035zM16Binbaz/nWAzS12dRIXhZdSUWRY7Fv0= +github.com/bufbuild/protovalidate-go v0.6.3/go.mod h1:J4PtwP9Z2YAGgB0+o+tTWEDtLtXvz/gfhFZD8pbzM/U= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -94,6 +102,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -154,6 +164,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= +github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -358,6 +370,8 @@ github.com/stephenafamo/scan v0.5.0 h1:1zDlY1PFnLB8MErWVil/vywAoZxGIdQS/y8nDiGU+ github.com/stephenafamo/scan v0.5.0/go.mod h1:FhIUJ8pLNyex36xGFiazDJJ5Xry0UkAi+RkWRrEcRMg= github.com/stephenafamo/sqlparser v0.0.0-20230326220333-c2adaf4c30e8 h1:HR6pFkWHsRRVm+VUSjltpaI56XFl2hdwxdGw7hHIPDk= github.com/stephenafamo/sqlparser v0.0.0-20230326220333-c2adaf4c30e8/go.mod h1:hOw+0TLAWETjE8UJG+q5bdj7EArbIombNBnEUoF7XwM= +github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -717,8 +731,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/main.go b/main.go index 82f667c..94d8d91 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,8 @@ import ( "github.com/joho/godotenv" "github.com/tigorlazuardi/redmage/cli" "github.com/tigorlazuardi/redmage/db" + + _ "github.com/tigorlazuardi/redmage/tools" ) //go:embed db/migrations/*.sql diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index 7ae5e0f..aab9e91 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -1,8 +1,8 @@ version: v2 plugins: - local: protoc-gen-go - out: ../gen/grpc + out: ../gen/proto opt: paths=source_relative - local: protoc-gen-connect-go - out: ../gen/grpc + out: ../gen/proto opt: paths=source_relative diff --git a/proto/buf.lock b/proto/buf.lock new file mode 100644 index 0000000..186cc36 --- /dev/null +++ b/proto/buf.lock @@ -0,0 +1,6 @@ +# Generated by buf. DO NOT EDIT. +version: v2 +deps: + - name: buf.build/bufbuild/protovalidate + commit: a6c49f84cc0f4e038680d390392e2ab0 + digest: b5:e968392e88ff7915adcbd1635d670b45bff8836ec2415d81fc559ca5470a695dbdc30030bad8bc5764647c731079e9e7bba0023ea25c4e4a1672a7d2561d4a19 diff --git a/proto/buf.yaml b/proto/buf.yaml index b4d4e47..291ef16 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1 +1,3 @@ version: v2 +deps: + - buf.build/bufbuild/protovalidate diff --git a/proto/device/v1/device.proto b/proto/device/v1/device.proto new file mode 100644 index 0000000..e073ba3 --- /dev/null +++ b/proto/device/v1/device.proto @@ -0,0 +1,88 @@ +syntax = "proto3"; + +package device.v1; + +import "buf/validate/validate.proto"; + +option go_package = "github.com/tigorlazuardi/redmage/gen/proto/device/v1"; + +service DeviceService { + // CreateDevice creates a new device. + rpc CreateDevice(CreateDeviceRequest) returns (CreateDeviceResponse) {} +} + +message CreateDeviceRequest { + // The `slug` is a unique identifier for the device, used to identify the device within the system. + // Each `slug` must be unique across all devices. + string slug = 1 [(buf.validate.field).string.min_len = 1]; + + // `enable` is a flag to set if a device is enabled upon creation. Default false. + bool enable = 2; + + // The name of the device. This is used for display purposes. + string name = 3; + + // The display x resolution of the device. + double resolution_x = 4; + + // The display y resolution of the device. + double resolution_y = 5; + + // aspect_ratio_tolerance is a tolerance for aspect ratio images to be accepted. + // + // The bigger the aspect_ratio_tolerance, the more images will be fetched, but it also means more likely + // for images that will look stretched if you set the device wallpaper view as stretched or + // will overfill if you set the device wallpaper view as fill. + // + // if a device has resolution_x = 1920, resolution_y = 1080, it has an aspect ratio of 1.777~ (1920 divided by 1080). + // + // an aspect_ratio_tolerance of 0.2 means that the device will accept images with aspect ratio between 1.577~ and 1.977~. + // + // THIS IS NOT A FILTER FOR IMAGE SIZE. This filter will take images that are far bigger or smaller than the device resolution + // as long as the aspect ratio is within the tolerance. Like example above, if an image has resolution of 3840x2160, it will be + // accepted by the device even though it is 2 times bigger than the device resolution. + // + // If you want to filter image size, use min_x, min_y, max_x, max_y fields. + // + double aspect_ratio_tolerance = 6; + + // The minimum x resolution required for an image to be accepted by the device. + // + // A value of 0 indicates no minimum x resolution. + // + // The default value is 0. + int32 min_x = 7; + + // The minimum y resolution required for an image to be accepted by the device. + // + // A value of 0 indicates no minimum y resolution. + // + // The default value is 0. + int32 min_y = 8; + + // The maximum x resolution allowed for an image to be accepted by the device. + // + // A value of 0 indicates no maximum x resolution. + // + // The default value is 0. + int32 max_x = 9; + + // The maximum y resolution allowed for an image to be accepted by the device. + // + // A value of 0 indicates no maximum y resolution. + // + // The default value is 0. + int32 max_y = 10; + + // The `nsfw` parameter allows the device to accept NSFW (Not Safe For Work) images when set to true. + bool nsfw = 11; + + // `windows_wallpaper_mode` when set to true, downloaded images will be put on single folder location + // instead of inside folders separated by subreddit names. + bool windows_wallpaper_mode = 12; +} + +message CreateDeviceResponse { + // `slug` is the slug of the created device. + string slug = 1; +} diff --git a/proto/redmage/redmage.proto b/proto/redmage/redmage.proto deleted file mode 100644 index 1d4e363..0000000 --- a/proto/redmage/redmage.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; - -package redmage; - -// option go_package = "google.golang.org/grpc/examples/helloworld/helloworld"; -option go_package = "github.com/tigorlazuardi/redmage/gen/grpc/redmage"; -option java_multiple_files = true; -option java_outer_classname = "HelloWorldProto"; -option java_package = "io.grpc.examples.helloworld"; - -// The greeting service definition. -service Greeter { - // Sends a greeting - rpc SayHello(HelloRequest) returns (HelloReply) {} -} - -// The request message containing the user's name. -message HelloRequest { - string name = 1; -} - -// The response message containing the greetings -message HelloReply { - string message = 1; -} diff --git a/server/grpc/grpc.go b/server/grpc/grpc.go new file mode 100644 index 0000000..a169932 --- /dev/null +++ b/server/grpc/grpc.go @@ -0,0 +1,3 @@ +package grpc + +type Server struct{} diff --git a/server/grpc/handlers/device.go b/server/grpc/handlers/device.go new file mode 100644 index 0000000..91d7dbd --- /dev/null +++ b/server/grpc/handlers/device.go @@ -0,0 +1,25 @@ +package handlers + +import ( + "context" + + "connectrpc.com/connect" + "github.com/tigorlazuardi/redmage/api" + device "github.com/tigorlazuardi/redmage/gen/proto/device/v1" + deviceConnect "github.com/tigorlazuardi/redmage/gen/proto/device/v1/v1connect" +) + +var _ deviceConnect.DeviceServiceHandler = (*Device)(nil) + +type Device struct { + deviceConnect.UnimplementedDeviceServiceHandler + + API *api.API +} + +func (de *Device) CreateDevice(ctx context.Context, req *connect.Request[device.CreateDeviceRequest]) (*connect.Response[device.CreateDeviceResponse], error) { + ctx, span := tracer.Start(ctx, "Device.CreateDevice") + defer span.End() + + panic("not implemented") // TODO: Implement +} diff --git a/server/grpc/handlers/trace.go b/server/grpc/handlers/trace.go new file mode 100644 index 0000000..aed173d --- /dev/null +++ b/server/grpc/handlers/trace.go @@ -0,0 +1,5 @@ +package handlers + +import "go.opentelemetry.io/otel" + +var tracer = otel.Tracer("handlers") diff --git a/tools/connectrpc.go b/tools/connectrpc.go new file mode 100644 index 0000000..cc932ae --- /dev/null +++ b/tools/connectrpc.go @@ -0,0 +1,5 @@ +package tools + +import ( + _ "connectrpc.com/connect" +) diff --git a/tools/grpc.go b/tools/grpc.go deleted file mode 100644 index f7eca12..0000000 --- a/tools/grpc.go +++ /dev/null @@ -1 +0,0 @@ -package tools diff --git a/tools/protobuf.go b/tools/protobuf.go new file mode 100644 index 0000000..93e28c7 --- /dev/null +++ b/tools/protobuf.go @@ -0,0 +1,7 @@ +package tools + +import ( + _ "github.com/bufbuild/protovalidate-go" + _ "google.golang.org/protobuf/reflect/protoreflect" + _ "google.golang.org/protobuf/runtime/protoimpl" +)