From 649be571d291a00d1a2580e681f8c027f4d2677a Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Thu, 8 Aug 2024 20:39:04 +0700 Subject: [PATCH] devices: implemented DeviceExists service --- go/api/api.go | 3 +++ go/api/devices_list.go | 3 --- go/server/device_handlers.go | 19 +++++++++++++++++++ schemas/proto/device/v1/device.proto | 4 ++++ schemas/proto/device/v1/exists.proto | 16 ++++++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 schemas/proto/device/v1/exists.proto diff --git a/go/api/api.go b/go/api/api.go index 59440d6..5c42f4c 100644 --- a/go/api/api.go +++ b/go/api/api.go @@ -4,8 +4,11 @@ import ( "sync" "github.com/stephenafamo/bob" + "github.com/tigorlazuardi/bluemage/go/gen/converter" ) +var convert converter.DeviceConverterImpl + type API struct { mu sync.Mutex DB bob.Executor diff --git a/go/api/devices_list.go b/go/api/devices_list.go index 7026ab3..8a0b2a5 100644 --- a/go/api/devices_list.go +++ b/go/api/devices_list.go @@ -7,15 +7,12 @@ import ( "github.com/stephenafamo/bob/dialect/sqlite" "github.com/stephenafamo/bob/dialect/sqlite/dialect" "github.com/stephenafamo/bob/dialect/sqlite/sm" - "github.com/tigorlazuardi/bluemage/go/gen/converter" "github.com/tigorlazuardi/bluemage/go/gen/models" device "github.com/tigorlazuardi/bluemage/go/gen/proto/device/v1" "github.com/tigorlazuardi/bluemage/go/pkg/errs" "golang.org/x/net/context" ) -var convert converter.DeviceConverterImpl - func queryFromListDeviceRequest(req *device.ListDevicesRequest) (expr []bob.Mod[*dialect.SelectQuery]) { expr = countQueryFromListDeviceRequest(req) diff --git a/go/server/device_handlers.go b/go/server/device_handlers.go index ba9f651..25243a8 100644 --- a/go/server/device_handlers.go +++ b/go/server/device_handlers.go @@ -81,3 +81,22 @@ func (de *DeviceHandler) UpdateDevice(ctx context.Context, request *connect.Requ return connect.NewResponse(resp), nil } + +// DeviceExists checks if a device exists in the database. +func (de *DeviceHandler) DeviceExists(ctx context.Context, request *connect.Request[device.DeviceExistsRequest]) (*connect.Response[device.DeviceExistsResponse], error) { + slug := request.Msg.Slug + + if err := validate.Validate(request.Msg); err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + exists, err := de.API.DevicesExist(ctx, slug) + if err != nil { + return nil, errs.IntoConnectError(err) + } + + resp := &device.DeviceExistsResponse{ + Exists: exists, + } + return connect.NewResponse(resp), nil +} diff --git a/schemas/proto/device/v1/device.proto b/schemas/proto/device/v1/device.proto index d6e7868..8153b29 100644 --- a/schemas/proto/device/v1/device.proto +++ b/schemas/proto/device/v1/device.proto @@ -3,6 +3,7 @@ syntax = "proto3"; package device.v1; import "device/v1/create.proto"; +import "device/v1/exists.proto"; import "device/v1/get.proto"; import "device/v1/list.proto"; import "device/v1/update.proto"; @@ -29,4 +30,7 @@ service DeviceService { // // Only fields that are set in the request will be updated. rpc UpdateDevice(UpdateDeviceRequest) returns (UpdateDeviceResponse) {} + + // DeviceExists checks if a device exists in the database. + rpc DeviceExists(DeviceExistsRequest) returns (DeviceExistsResponse) {} } diff --git a/schemas/proto/device/v1/exists.proto b/schemas/proto/device/v1/exists.proto new file mode 100644 index 0000000..1b65057 --- /dev/null +++ b/schemas/proto/device/v1/exists.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package device.v1; + +import "buf/validate/validate.proto"; + +option go_package = "github.com/tigorlazuardi/bluemage/go/gen/proto/device/v1"; + +message DeviceExistsRequest { + // The `slug` is a unique identifier for the device. + string slug = 1 [(buf.validate.field).string.min_len = 1]; +} + +message DeviceExistsResponse { + bool exists = 1; +}