From 604e5bb375e853ceda63b6f21b3b0727123b807b Mon Sep 17 00:00:00 2001 From: caosown Date: Thu, 17 Aug 2023 16:32:39 +0700 Subject: [PATCH 1/8] [feat] add new api station in swagger --- swagger.yml | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/swagger.yml b/swagger.yml index e52c0c6..a841312 100644 --- a/swagger.yml +++ b/swagger.yml @@ -175,6 +175,92 @@ paths: $ref: "#/definitions/MergeRequest" # station zone + /station/upload/{mergeRequestID}: + post: + summary: upload station + operationId: UploadStation + tags: + - "station" + security: + - api_key: [] + parameters: + - in: path + type: string + required: true + name: mergeRequestID + responses: + 200: + description: OK + /station/different/{mergeRequestID}: + get: + summary: get a diff of the file in the temporary area and target area + tags: + - "station" + operationId: GetStationDiff + parameters: + - in: path + required: true + name: mergeRequestID + type: string + security: + - api_key: [] + responses: + 200: + description: OK + schema: + type: object + properties: + data: + type: array + items: + $ref: "#/definitions/Station" + 400: + description: Bad Request + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: Internal Error + schema: + $ref: "#/definitions/ErrorResponse" + /station/merge-request: + post: + summary: create merge request station + operationId: CreateMergeRequestStation + tags: + - "station" + security: + - api_key: [] + parameters: + - in: body + name: body + schema: + properties: + TemporaryPath: + type: string + description: temporary file path + TargetPath: + type: string + description: target file path + responses: + 200: + description: OK + get: + summary: get station merge requests + operationId: ListMergeRequestsStation + tags: + - "station" + security: + - api_key: [] + responses: + 200: + description: OK + schema: + type: object + properties: + data: + type: array + items: + $ref: "#/definitions/MergeRequest" # material-resource zone @@ -236,6 +322,34 @@ definitions: Max: type: integer description: max + + Station: + type: object + properties: + ID: + type: string + description: station ID + Sub-company: + type: string + description: sub-company + Factory: + type: string + description: factory + DepartmentID: + type: string + description: department ID + Alias: + type: string + description: station name alias + Serial-number: + type: integer + description: serial-number + Description: + type: string + description: description + Devices: + type: string + description: devices MergeRequest: type: object From 008387038a8af58c6f6f18d15f062a0117f466ba Mon Sep 17 00:00:00 2001 From: caosown Date: Fri, 18 Aug 2023 09:50:15 +0700 Subject: [PATCH 2/8] fix: devices datatype --- .../restapi/configure_data_flow_sync.go | 23 +++++++++++++++++++ swagger.yml | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/server/swagger/restapi/configure_data_flow_sync.go b/server/swagger/restapi/configure_data_flow_sync.go index 919fc12..a45f648 100644 --- a/server/swagger/restapi/configure_data_flow_sync.go +++ b/server/swagger/restapi/configure_data_flow_sync.go @@ -26,6 +26,7 @@ import ( "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations" "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations/account" "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations/limitary_hour" + "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations/station" ) //go:generate swagger generate server --target ..\..\swagger --name DataFlowSync --spec ..\..\..\swagger.yml --principal models.Principal @@ -138,6 +139,28 @@ func configureAPI(api *operations.DataFlowSyncAPI) http.Handler { }) } + // station api handler + if api.StationCreateMergeRequestStationHandler == nil { + api.StationCreateMergeRequestStationHandler = station.CreateMergeRequestStationHandlerFunc(func(params station.CreateMergeRequestStationParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation station.CreateMergeRequestStation has not yet been implemented") + }) + } + if api.StationGetStationDiffHandler == nil { + api.StationGetStationDiffHandler = station.GetStationDiffHandlerFunc(func(params station.GetStationDiffParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation station.GetStationDiff has not yet been implemented") + }) + } + if api.StationListMergeRequestsStationHandler == nil { + api.StationListMergeRequestsStationHandler = station.ListMergeRequestsStationHandlerFunc(func(params station.ListMergeRequestsStationParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation station.ListMergeRequestsStation has not yet been implemented") + }) + } + if api.StationUploadStationHandler == nil { + api.StationUploadStationHandler = station.UploadStationHandlerFunc(func(params station.UploadStationParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation station.UploadStation has not yet been implemented") + }) + } + api.PreServerShutdown = func() {} api.ServerShutdown = func() {} diff --git a/swagger.yml b/swagger.yml index a841312..b97e1a6 100644 --- a/swagger.yml +++ b/swagger.yml @@ -348,7 +348,9 @@ definitions: type: string description: description Devices: - type: string + type: array + items: + type: string description: devices MergeRequest: From 207923e0365260f6353e2e0799b0423e3bfd6e1c Mon Sep 17 00:00:00 2001 From: caosown Date: Fri, 25 Aug 2023 13:30:41 +0700 Subject: [PATCH 3/8] fix: upsert stationDataStorage --- server/assets/protobuf/protogen.go | 3 + server/assets/protobuf/types/type.pb.go | 78 +++++++++++++++++++ server/assets/protobuf/types/type.proto | 12 +++ .../repositories/orm/models/station.go | 8 -- .../repositories/orm/models/storage.go | 17 ++++ .../repositories/services/station/impl.go | 24 +++++- server/internal/repositories/station.go | 5 ++ 7 files changed, 138 insertions(+), 9 deletions(-) create mode 100644 server/assets/protobuf/protogen.go create mode 100644 server/assets/protobuf/types/type.pb.go create mode 100644 server/assets/protobuf/types/type.proto delete mode 100644 server/internal/repositories/orm/models/station.go create mode 100644 server/internal/repositories/orm/models/storage.go create mode 100644 server/internal/repositories/station.go diff --git a/server/assets/protobuf/protogen.go b/server/assets/protobuf/protogen.go new file mode 100644 index 0000000..44138a4 --- /dev/null +++ b/server/assets/protobuf/protogen.go @@ -0,0 +1,3 @@ +package type_ + +//go:generate protoc --go_out=path=source_relative:. types/type.proto diff --git a/server/assets/protobuf/types/type.pb.go b/server/assets/protobuf/types/type.pb.go new file mode 100644 index 0000000..bd4f614 --- /dev/null +++ b/server/assets/protobuf/types/type.pb.go @@ -0,0 +1,78 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: types/type.proto + +package type_ + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Type int32 + +const ( + Type_UNSPECIFIED Type = 0 + Type_LIMITARY_HOUR Type = 1 + Type_STATION Type = 2 + Type_STATION_GROUP Type = 3 + Type_SUBSTITUTION Type = 4 + Type_MATERIAL_RESOURCE Type = 5 +) + +var Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "LIMITARY_HOUR", + 2: "STATION", + 3: "STATION_GROUP", + 4: "SUBSTITUTION", + 5: "MATERIAL_RESOURCE", +} + +var Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "LIMITARY_HOUR": 1, + "STATION": 2, + "STATION_GROUP": 3, + "SUBSTITUTION": 4, + "MATERIAL_RESOURCE": 5, +} + +func (x Type) String() string { + return proto.EnumName(Type_name, int32(x)) +} + +func (Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_7a690403660dc8f8, []int{0} +} + +func init() { + proto.RegisterEnum("type_.Type", Type_name, Type_value) +} + +func init() { proto.RegisterFile("types/type.proto", fileDescriptor_7a690403660dc8f8) } + +var fileDescriptor_7a690403660dc8f8 = []byte{ + // 156 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x28, 0xa9, 0x2c, 0x48, + 0x2d, 0xd6, 0x07, 0x91, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xac, 0x20, 0x76, 0xbc, 0x56, + 0x31, 0x17, 0x4b, 0x48, 0x65, 0x41, 0xaa, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f, 0x70, 0x80, 0xab, + 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x90, 0x20, 0x17, 0xaf, 0x8f, 0xa7, 0xaf, 0x67, + 0x88, 0x63, 0x50, 0x64, 0xbc, 0x87, 0x7f, 0x68, 0x90, 0x00, 0xa3, 0x10, 0x37, 0x17, 0x7b, 0x70, + 0x88, 0x63, 0x88, 0xa7, 0xbf, 0x9f, 0x00, 0x13, 0x48, 0x1e, 0xca, 0x89, 0x77, 0x0f, 0xf2, 0x0f, + 0x0d, 0x10, 0x60, 0x16, 0x12, 0xe0, 0xe2, 0x09, 0x0e, 0x75, 0x0a, 0x0e, 0xf1, 0x0c, 0x09, 0x05, + 0x2b, 0x62, 0x11, 0x12, 0xe5, 0x12, 0xf4, 0x75, 0x0c, 0x71, 0x0d, 0xf2, 0x74, 0xf4, 0x89, 0x0f, + 0x72, 0x0d, 0xf6, 0x0f, 0x0d, 0x72, 0x76, 0x15, 0x60, 0x4d, 0x62, 0x03, 0x3b, 0xc1, 0x18, 0x10, + 0x00, 0x00, 0xff, 0xff, 0x20, 0xed, 0x1d, 0x92, 0x96, 0x00, 0x00, 0x00, +} diff --git a/server/assets/protobuf/types/type.proto b/server/assets/protobuf/types/type.proto new file mode 100644 index 0000000..2eebff9 --- /dev/null +++ b/server/assets/protobuf/types/type.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package type_; + +enum Type { + UNSPECIFIED = 0; + LIMITARY_HOUR = 1; + STATION = 2; + STATION_GROUP = 3; + SUBSTITUTION = 4; + MATERIAL_RESOURCE = 5; +} \ No newline at end of file diff --git a/server/internal/repositories/orm/models/station.go b/server/internal/repositories/orm/models/station.go deleted file mode 100644 index 8b86f55..0000000 --- a/server/internal/repositories/orm/models/station.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -type Station struct { - ID string `gorm:"type:text,primaryKey"` - Content []byte `gorm:"type:bytea; not null"` - CreatedBy string `gorm:"type:text, not null"` - CreatedAt int64 `gorm:"type:bigint;autoCreateTime"` -} diff --git a/server/internal/repositories/orm/models/storage.go b/server/internal/repositories/orm/models/storage.go new file mode 100644 index 0000000..2664e6c --- /dev/null +++ b/server/internal/repositories/orm/models/storage.go @@ -0,0 +1,17 @@ +package models + +import ( + type_ "github.com/quocbang/data-flow-sync/server/assets/protobuf/types" +) + +type DataStorage struct { + ID string `gorm:"type:text,primaryKey"` + Type type_.Type `gorm:"not null"` + Content []byte `gorm:"type:bytea; not null"` + CreatedBy string `gorm:"type:text, not null"` + CreatedAt int64 `gorm:"type:bigint;autoCreateTime"` +} + +func (DataStorage) Table() string { + return "data_storage" +} diff --git a/server/internal/repositories/services/station/impl.go b/server/internal/repositories/services/station/impl.go index 86bd07d..1c30292 100644 --- a/server/internal/repositories/services/station/impl.go +++ b/server/internal/repositories/services/station/impl.go @@ -1,10 +1,16 @@ package station import ( - "github.com/go-redis/redis/v9" + "context" + "encoding/json" + + "github.com/go-redis/redis" "gorm.io/gorm" + type_ "github.com/quocbang/data-flow-sync/server/assets/protobuf/types" "github.com/quocbang/data-flow-sync/server/internal/repositories" + station "github.com/quocbang/data-flow-sync/server/internal/repositories/orm/models" + "github.com/quocbang/data-flow-sync/server/swagger/models" ) type service struct { @@ -18,3 +24,19 @@ func NewService(pg *gorm.DB, redis *redis.Client) repositories.StationServices { redis: redis, } } + +func (s service) UpsertStationDataStorage(ctx context.Context, req *models.Station) (repositories.CreateStationDataStorageReply, error) { + jsonStationData, err := json.Marshal(req) + if err != nil { + return repositories.CreateStationDataStorageReply{}, err + } + + byteStationData := []byte(jsonStationData) + + reply := s.pg.Create(&station.DataStorage{ + ID: req.ID, + Type: type_.Type_STATION, + Content: byteStationData, + }) + return repositories.CreateStationDataStorageReply{RowsAffected: reply.RowsAffected}, reply.Error +} diff --git a/server/internal/repositories/station.go b/server/internal/repositories/station.go new file mode 100644 index 0000000..3d3cebd --- /dev/null +++ b/server/internal/repositories/station.go @@ -0,0 +1,5 @@ +package repositories + +type CreateStationDataStorageReply struct { + RowsAffected RowsAffected +} From d83f732740000e03cfdf2843cb0b3d9f6d104cea Mon Sep 17 00:00:00 2001 From: caosown Date: Fri, 25 Aug 2023 13:43:12 +0700 Subject: [PATCH 4/8] fix: station json data --- server/internal/repositories/services/station/impl.go | 6 +++--- server/internal/repositories/station.go | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/internal/repositories/services/station/impl.go b/server/internal/repositories/services/station/impl.go index 1c30292..65308a8 100644 --- a/server/internal/repositories/services/station/impl.go +++ b/server/internal/repositories/services/station/impl.go @@ -31,12 +31,12 @@ func (s service) UpsertStationDataStorage(ctx context.Context, req *models.Stati return repositories.CreateStationDataStorageReply{}, err } - byteStationData := []byte(jsonStationData) - reply := s.pg.Create(&station.DataStorage{ ID: req.ID, Type: type_.Type_STATION, - Content: byteStationData, + Content: jsonStationData, }) return repositories.CreateStationDataStorageReply{RowsAffected: reply.RowsAffected}, reply.Error } + +// func (s service) GetStation(ctx context.Context, id string) diff --git a/server/internal/repositories/station.go b/server/internal/repositories/station.go index 3d3cebd..ddacac7 100644 --- a/server/internal/repositories/station.go +++ b/server/internal/repositories/station.go @@ -3,3 +3,6 @@ package repositories type CreateStationDataStorageReply struct { RowsAffected RowsAffected } + +type GetStationReply struct { +} From e48f72b124def4281bffc1bd152e90350e0424b2 Mon Sep 17 00:00:00 2001 From: caosown Date: Fri, 25 Aug 2023 14:15:45 +0700 Subject: [PATCH 5/8] refactor: rm trash --- server/internal/repositories/services/station/impl.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/internal/repositories/services/station/impl.go b/server/internal/repositories/services/station/impl.go index 65308a8..e075db7 100644 --- a/server/internal/repositories/services/station/impl.go +++ b/server/internal/repositories/services/station/impl.go @@ -38,5 +38,3 @@ func (s service) UpsertStationDataStorage(ctx context.Context, req *models.Stati }) return repositories.CreateStationDataStorageReply{RowsAffected: reply.RowsAffected}, reply.Error } - -// func (s service) GetStation(ctx context.Context, id string) From 06693b495811b01c69b21f36f84e1ddee8c39cec Mon Sep 17 00:00:00 2001 From: caosown Date: Sat, 26 Aug 2023 13:26:01 +0700 Subject: [PATCH 6/8] fix: createstationdatastorage --- server/go.mod | 2 ++ server/go.sum | 2 ++ server/internal/repositories/repo_list.go | 2 ++ .../repositories/services/station/impl.go | 24 +++++++++++------ server/internal/services/service.go | 1 + swagger.yml | 27 ++++++++++++++++++- 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/server/go.mod b/server/go.mod index af80b6f..6f416a8 100644 --- a/server/go.mod +++ b/server/go.mod @@ -26,6 +26,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/postgres v1.5.2 gorm.io/gorm v1.25.3 + sigs.k8s.io/yaml v1.3.0 ) require ( @@ -55,4 +56,5 @@ require ( golang.org/x/sys v0.11.0 // indirect golang.org/x/text v0.12.0 // indirect google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/server/go.sum b/server/go.sum index 7c3917b..7222006 100644 --- a/server/go.sum +++ b/server/go.sum @@ -261,3 +261,5 @@ gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= gorm.io/gorm v1.25.3 h1:zi4rHZj1anhZS2EuEODMhDisGy+Daq9jtPrNGgbQYD8= gorm.io/gorm v1.25.3/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/server/internal/repositories/repo_list.go b/server/internal/repositories/repo_list.go index 7b5bbe9..60c1829 100644 --- a/server/internal/repositories/repo_list.go +++ b/server/internal/repositories/repo_list.go @@ -4,6 +4,7 @@ import ( "context" "github.com/quocbang/data-flow-sync/server/internal/repositories/orm/models" + model "github.com/quocbang/data-flow-sync/server/swagger/models" ) type Services interface { @@ -13,6 +14,7 @@ type Services interface { } type StationServices interface { + UpsertStationDataStorage(context.Context, *model.CreateStationDataStorage) (CreateStationDataStorageReply, error) } type StationGroupServices interface { diff --git a/server/internal/repositories/services/station/impl.go b/server/internal/repositories/services/station/impl.go index e075db7..fcd6514 100644 --- a/server/internal/repositories/services/station/impl.go +++ b/server/internal/repositories/services/station/impl.go @@ -2,10 +2,11 @@ package station import ( "context" - "encoding/json" + "fmt" - "github.com/go-redis/redis" + "github.com/go-redis/redis/v9" "gorm.io/gorm" + "sigs.k8s.io/yaml" type_ "github.com/quocbang/data-flow-sync/server/assets/protobuf/types" "github.com/quocbang/data-flow-sync/server/internal/repositories" @@ -25,16 +26,23 @@ func NewService(pg *gorm.DB, redis *redis.Client) repositories.StationServices { } } -func (s service) UpsertStationDataStorage(ctx context.Context, req *models.Station) (repositories.CreateStationDataStorageReply, error) { - jsonStationData, err := json.Marshal(req) +func (s service) UpsertStationDataStorage(ctx context.Context, req *models.CreateStationDataStorage) (repositories.CreateStationDataStorageReply, error) { + errorMessage := "" + data, err := yaml.YAMLToJSON([]byte(req.Content)) if err != nil { - return repositories.CreateStationDataStorageReply{}, err + errorMessage += fmt.Sprintf("%s station is not a valid YAML: %v\n", req.ID, err) + } + + if errorMessage != "" { + return repositories.CreateStationDataStorageReply{}, fmt.Errorf(errorMessage) } reply := s.pg.Create(&station.DataStorage{ - ID: req.ID, - Type: type_.Type_STATION, - Content: jsonStationData, + ID: req.ID, + Type: type_.Type_STATION, + Content: data, + CreatedBy: "tester_AI", + CreatedAt: 454545, }) return repositories.CreateStationDataStorageReply{RowsAffected: reply.RowsAffected}, reply.Error } diff --git a/server/internal/services/service.go b/server/internal/services/service.go index 4bafb68..a26f80c 100644 --- a/server/internal/services/service.go +++ b/server/internal/services/service.go @@ -19,6 +19,7 @@ func RegisterService(account AccountServices) *Services { } type StationServices interface { + CreateStationDataStorage() } type StationGroupServices interface { diff --git a/swagger.yml b/swagger.yml index b97e1a6..5ca3046 100644 --- a/swagger.yml +++ b/swagger.yml @@ -261,7 +261,23 @@ paths: type: array items: $ref: "#/definitions/MergeRequest" - + /station/sync: + post: + summary: create station data storage + operationId: CreateStationDataStorage + tags: + - "station" + responses: + 200: + description: A successful response. + parameters: + - name: body + in: body + required: true + schema: + $ref: "#/definitions/CreateStationDataStorage" + + # material-resource zone # substitution zone @@ -352,6 +368,15 @@ definitions: items: type: string description: devices + + CreateStationDataStorage: + type: object + properties: + id: + type: string + content: + type: string + description: the content MUST be in YAML format. MergeRequest: type: object From 45175a7a44ebf938b957392e643b1b7c1faf52a7 Mon Sep 17 00:00:00 2001 From: caosown Date: Sat, 26 Aug 2023 15:15:56 +0700 Subject: [PATCH 7/8] fix: data storage table --- server/internal/repositories/orm/models/model.go | 1 + server/internal/repositories/orm/models/storage.go | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/server/internal/repositories/orm/models/model.go b/server/internal/repositories/orm/models/model.go index 56b6561..a283121 100644 --- a/server/internal/repositories/orm/models/model.go +++ b/server/internal/repositories/orm/models/model.go @@ -9,5 +9,6 @@ type Models interface { func GetModelList() []Models { return []Models{ &Account{}, + &DataStorage{}, } } diff --git a/server/internal/repositories/orm/models/storage.go b/server/internal/repositories/orm/models/storage.go index 2664e6c..e87a750 100644 --- a/server/internal/repositories/orm/models/storage.go +++ b/server/internal/repositories/orm/models/storage.go @@ -5,13 +5,13 @@ import ( ) type DataStorage struct { - ID string `gorm:"type:text,primaryKey"` - Type type_.Type `gorm:"not null"` - Content []byte `gorm:"type:bytea; not null"` - CreatedBy string `gorm:"type:text, not null"` + ID string `gorm:"column:id;type:text;primaryKey"` + Type type_.Type `gorm:"type:int;not null"` + Content []byte `gorm:"type:bytea;not null"` + CreatedBy string `gorm:"type:text;not null"` CreatedAt int64 `gorm:"type:bigint;autoCreateTime"` } -func (DataStorage) Table() string { +func (d *DataStorage) TableName() string { return "data_storage" } From c122904463faab2c94e6036d6715e22779ed0fae Mon Sep 17 00:00:00 2001 From: caosown Date: Mon, 28 Aug 2023 09:43:23 +0700 Subject: [PATCH 8/8] fix: upsertStation --- server/internal/repositories/repo_list.go | 6 ++-- .../repositories/services/station/impl.go | 30 +++++++++++++------ swagger.yml | 11 +++++++ 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/server/internal/repositories/repo_list.go b/server/internal/repositories/repo_list.go index 60c1829..4c4352b 100644 --- a/server/internal/repositories/repo_list.go +++ b/server/internal/repositories/repo_list.go @@ -3,8 +3,10 @@ package repositories import ( "context" + "github.com/go-openapi/runtime/middleware" "github.com/quocbang/data-flow-sync/server/internal/repositories/orm/models" - model "github.com/quocbang/data-flow-sync/server/swagger/models" + mod "github.com/quocbang/data-flow-sync/server/swagger/models" + "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations/station" ) type Services interface { @@ -14,7 +16,7 @@ type Services interface { } type StationServices interface { - UpsertStationDataStorage(context.Context, *model.CreateStationDataStorage) (CreateStationDataStorageReply, error) + UpsertStationDataStorage(params station.CreateStationDataStorageParams, principal *mod.Principal) middleware.Responder } type StationGroupServices interface { diff --git a/server/internal/repositories/services/station/impl.go b/server/internal/repositories/services/station/impl.go index fcd6514..fafe63e 100644 --- a/server/internal/repositories/services/station/impl.go +++ b/server/internal/repositories/services/station/impl.go @@ -1,17 +1,19 @@ package station import ( - "context" "fmt" + "net/http" + "github.com/go-openapi/runtime/middleware" "github.com/go-redis/redis/v9" "gorm.io/gorm" "sigs.k8s.io/yaml" type_ "github.com/quocbang/data-flow-sync/server/assets/protobuf/types" "github.com/quocbang/data-flow-sync/server/internal/repositories" - station "github.com/quocbang/data-flow-sync/server/internal/repositories/orm/models" + repo "github.com/quocbang/data-flow-sync/server/internal/repositories/orm/models" "github.com/quocbang/data-flow-sync/server/swagger/models" + "github.com/quocbang/data-flow-sync/server/swagger/restapi/operations/station" ) type service struct { @@ -26,23 +28,33 @@ func NewService(pg *gorm.DB, redis *redis.Client) repositories.StationServices { } } -func (s service) UpsertStationDataStorage(ctx context.Context, req *models.CreateStationDataStorage) (repositories.CreateStationDataStorageReply, error) { +func (s service) UpsertStationDataStorage(params station.CreateStationDataStorageParams, principal *models.Principal) middleware.Responder { errorMessage := "" - data, err := yaml.YAMLToJSON([]byte(req.Content)) + data, err := yaml.YAMLToJSON([]byte(params.Body.Content)) if err != nil { - errorMessage += fmt.Sprintf("%s station is not a valid YAML: %v\n", req.ID, err) + errorMessage += fmt.Sprintf("%s station is not a valid YAML: %v\n", params.Body.ID, err) } if errorMessage != "" { - return repositories.CreateStationDataStorageReply{}, fmt.Errorf(errorMessage) + // return repositories.CreateStationDataStorageReply{}, fmt.Errorf(errorMessage) + return station.NewCreateStationDataStorageDefault(http.StatusBadRequest).WithPayload(&station.CreateStationDataStorageDefaultBody{ + Details: errorMessage, + }) } - reply := s.pg.Create(&station.DataStorage{ - ID: req.ID, + reply := s.pg.Create(&repo.DataStorage{ + ID: params.Body.ID, Type: type_.Type_STATION, Content: data, CreatedBy: "tester_AI", CreatedAt: 454545, }) - return repositories.CreateStationDataStorageReply{RowsAffected: reply.RowsAffected}, reply.Error + + if reply.Error != nil { + return station.NewCreateStationDataStorageDefault(http.StatusBadRequest).WithPayload(&station.CreateStationDataStorageDefaultBody{ + Details: reply.Error.Error(), + }) + } + + return station.NewCreateStationDataStorageOK() } diff --git a/swagger.yml b/swagger.yml index 5ca3046..09c120b 100644 --- a/swagger.yml +++ b/swagger.yml @@ -270,6 +270,17 @@ paths: responses: 200: description: A successful response. + default: + description: Unexpected error + schema: + type: object + properties: + code: + type: integer + x-omitempty: false + details: + type: string + x-omitempty: false parameters: - name: body in: body