mirror of
				https://github.com/3ybactuk/marketplace-go-service-project.git
				synced 2025-10-30 14:03:45 +03:00 
			
		
		
		
	[hw-8] add: repo layer
This commit is contained in:
		
							
								
								
									
										102
									
								
								api/comments/v1/comments.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								api/comments/v1/comments.proto
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  |  | ||||||
|  | import "google/protobuf/empty.proto"; | ||||||
|  | import "validate/validate.proto"; | ||||||
|  | import "google/api/annotations.proto"; | ||||||
|  | import "protoc-gen-openapiv2/options/annotations.proto"; | ||||||
|  |  | ||||||
|  | option go_package = "route256/pkg/api/comments/v1;comments"; | ||||||
|  |  | ||||||
|  | option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { | ||||||
|  |   info: { | ||||||
|  |     title: "Comments Service"; | ||||||
|  |     version: "1.0.0"; | ||||||
|  |   }; | ||||||
|  |   schemes: HTTP; | ||||||
|  |   schemes: HTTPS; | ||||||
|  |   consumes: "application/json"; | ||||||
|  |   produces: "application/json"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | message Comment { | ||||||
|  |   int64 id         = 1 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   int64 user_id    = 2 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   int64 sku        = 3 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   string text      = 4 [(validate.rules).string = {min_len:1, max_len:255}]; | ||||||
|  |   string created_at = 5;  // RFC3339 with ms | ||||||
|  | } | ||||||
|  |  | ||||||
|  | message CreateCommentRequest { | ||||||
|  |   int64 user_id = 1 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   int64 sku     = 2 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   string text   = 3 [(validate.rules).string = {min_len:1, max_len:255}]; | ||||||
|  | } | ||||||
|  | message CreateCommentResponse { Comment comment = 1; } | ||||||
|  |  | ||||||
|  | message GetCommentRequest { | ||||||
|  |   int64 id = 1 [(validate.rules).int64 = {gt:0}]; | ||||||
|  | } | ||||||
|  | message GetCommentResponse { Comment comment = 1; } | ||||||
|  |  | ||||||
|  | message UpdateCommentRequest { | ||||||
|  |   int64 id      = 1 [(validate.rules).int64 = {gt:0}]; | ||||||
|  |   int64 user_id = 2 [(validate.rules).int64 = {gt: 0}]; | ||||||
|  |   string text   = 3 [(validate.rules).string = {min_len:1, max_len:255}]; | ||||||
|  | } | ||||||
|  | message UpdateCommentResponse { Comment comment = 1; } | ||||||
|  |  | ||||||
|  | message ListBySkuRequest { | ||||||
|  |   int64 sku = 1 [(validate.rules).int64 = {gt:0}]; | ||||||
|  | } | ||||||
|  | message ListBySkuResponse { repeated Comment comments = 1; } | ||||||
|  |  | ||||||
|  | message ListByUserRequest { | ||||||
|  |   int64 user_id = 1 [(validate.rules).int64 = {gt:0}]; | ||||||
|  | } | ||||||
|  | message ListByUserResponse { repeated Comment comments = 1; } | ||||||
|  |  | ||||||
|  | service Comments { | ||||||
|  |   option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = { | ||||||
|  |     description: "Comment Service" | ||||||
|  |     external_docs: { | ||||||
|  |       url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/a_bit_of_everything.proto"; | ||||||
|  |       description: "Find out more about grpc-gateway"; | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   rpc Add(CreateCommentRequest) returns (CreateCommentResponse) { | ||||||
|  |     option (google.api.http) = { | ||||||
|  |       post: "/comment/add" | ||||||
|  |       body: "*" | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rpc GetById(GetCommentRequest) returns (GetCommentResponse) { | ||||||
|  |     option (google.api.http) = { | ||||||
|  |       post: "/comment/get-by-id" | ||||||
|  |       body: "*" | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rpc Edit(UpdateCommentRequest) returns (UpdateCommentResponse) { | ||||||
|  |     option (google.api.http) = { | ||||||
|  |       post: "/comment/edit" | ||||||
|  |       body: "*" | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rpc ListBySku(ListBySkuRequest)  returns (ListBySkuResponse) { | ||||||
|  |     option (google.api.http) = { | ||||||
|  |       post: "/comment/list-by-sku" | ||||||
|  |       body: "*" | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rpc ListByUser(ListByUserRequest) returns (ListByUserResponse) { | ||||||
|  |     option (google.api.http) = { | ||||||
|  |       post: "/comment/list-by-user" | ||||||
|  |       body: "*" | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										350
									
								
								api/openapiv2/comments/v1/comments.swagger.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								api/openapiv2/comments/v1/comments.swagger.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,350 @@ | |||||||
|  | { | ||||||
|  |   "swagger": "2.0", | ||||||
|  |   "info": { | ||||||
|  |     "title": "Comments Service", | ||||||
|  |     "version": "1.0.0" | ||||||
|  |   }, | ||||||
|  |   "tags": [ | ||||||
|  |     { | ||||||
|  |       "name": "Comments", | ||||||
|  |       "description": "Comment Service", | ||||||
|  |       "externalDocs": { | ||||||
|  |         "description": "Find out more about grpc-gateway", | ||||||
|  |         "url": "https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/a_bit_of_everything.proto" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "schemes": [ | ||||||
|  |     "http", | ||||||
|  |     "https" | ||||||
|  |   ], | ||||||
|  |   "consumes": [ | ||||||
|  |     "application/json" | ||||||
|  |   ], | ||||||
|  |   "produces": [ | ||||||
|  |     "application/json" | ||||||
|  |   ], | ||||||
|  |   "paths": { | ||||||
|  |     "/comment/add": { | ||||||
|  |       "post": { | ||||||
|  |         "operationId": "Comments_Add", | ||||||
|  |         "responses": { | ||||||
|  |           "200": { | ||||||
|  |             "description": "A successful response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/CreateCommentResponse" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "default": { | ||||||
|  |             "description": "An unexpected error response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/rpcStatus" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "body", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/CreateCommentRequest" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "Comments" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "/comment/edit": { | ||||||
|  |       "post": { | ||||||
|  |         "operationId": "Comments_Edit", | ||||||
|  |         "responses": { | ||||||
|  |           "200": { | ||||||
|  |             "description": "A successful response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/UpdateCommentResponse" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "default": { | ||||||
|  |             "description": "An unexpected error response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/rpcStatus" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "body", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/UpdateCommentRequest" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "Comments" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "/comment/get-by-id": { | ||||||
|  |       "post": { | ||||||
|  |         "operationId": "Comments_GetById", | ||||||
|  |         "responses": { | ||||||
|  |           "200": { | ||||||
|  |             "description": "A successful response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/GetCommentResponse" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "default": { | ||||||
|  |             "description": "An unexpected error response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/rpcStatus" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "body", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/GetCommentRequest" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "Comments" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "/comment/list-by-sku": { | ||||||
|  |       "post": { | ||||||
|  |         "operationId": "Comments_ListBySku", | ||||||
|  |         "responses": { | ||||||
|  |           "200": { | ||||||
|  |             "description": "A successful response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/ListBySkuResponse" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "default": { | ||||||
|  |             "description": "An unexpected error response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/rpcStatus" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "body", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/ListBySkuRequest" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "Comments" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "/comment/list-by-user": { | ||||||
|  |       "post": { | ||||||
|  |         "operationId": "Comments_ListByUser", | ||||||
|  |         "responses": { | ||||||
|  |           "200": { | ||||||
|  |             "description": "A successful response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/ListByUserResponse" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "default": { | ||||||
|  |             "description": "An unexpected error response.", | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/rpcStatus" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "body", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/ListByUserRequest" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "Comments" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "definitions": { | ||||||
|  |     "Comment": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "id": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "userId": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "sku": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "text": { | ||||||
|  |           "type": "string" | ||||||
|  |         }, | ||||||
|  |         "createdAt": { | ||||||
|  |           "type": "string", | ||||||
|  |           "title": "RFC3339 with ms" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "CreateCommentRequest": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "userId": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "sku": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "text": { | ||||||
|  |           "type": "string" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "CreateCommentResponse": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "comment": { | ||||||
|  |           "$ref": "#/definitions/Comment" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "GetCommentRequest": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "id": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "GetCommentResponse": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "comment": { | ||||||
|  |           "$ref": "#/definitions/Comment" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "ListBySkuRequest": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "sku": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "ListBySkuResponse": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "comments": { | ||||||
|  |           "type": "array", | ||||||
|  |           "items": { | ||||||
|  |             "type": "object", | ||||||
|  |             "$ref": "#/definitions/Comment" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "ListByUserRequest": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "userId": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "ListByUserResponse": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "comments": { | ||||||
|  |           "type": "array", | ||||||
|  |           "items": { | ||||||
|  |             "type": "object", | ||||||
|  |             "$ref": "#/definitions/Comment" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "UpdateCommentRequest": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "id": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "userId": { | ||||||
|  |           "type": "string", | ||||||
|  |           "format": "int64" | ||||||
|  |         }, | ||||||
|  |         "text": { | ||||||
|  |           "type": "string" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "UpdateCommentResponse": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "comment": { | ||||||
|  |           "$ref": "#/definitions/Comment" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "protobufAny": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "@type": { | ||||||
|  |           "type": "string" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "additionalProperties": {} | ||||||
|  |     }, | ||||||
|  |     "rpcStatus": { | ||||||
|  |       "type": "object", | ||||||
|  |       "properties": { | ||||||
|  |         "code": { | ||||||
|  |           "type": "integer", | ||||||
|  |           "format": "int32" | ||||||
|  |         }, | ||||||
|  |         "message": { | ||||||
|  |           "type": "string" | ||||||
|  |         }, | ||||||
|  |         "details": { | ||||||
|  |           "type": "array", | ||||||
|  |           "items": { | ||||||
|  |             "type": "object", | ||||||
|  |             "$ref": "#/definitions/protobufAny" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,12 +1,41 @@ | |||||||
| BINDIR=${CURDIR}/bin | BINDIR=${CURDIR}/../bin | ||||||
| PACKAGE=route256/comments | PACKAGE=route256/comments | ||||||
|  |  | ||||||
|  | MIGRATIONS_FOLDER	:= ./db/migrations/ | ||||||
|  | LOCAL_DB_NAME		:= route256 | ||||||
|  | LOCAL_DB_DSN		:= postgresql://user:password@localhost:5433/route256?sslmode=disable | ||||||
|  |  | ||||||
|  | PROD_USER := loms-user | ||||||
|  | PROD_PASS := loms-password | ||||||
|  | PROD_DB   := postgres-master | ||||||
|  |  | ||||||
|  | PROD_MIGRATIONS := ./comments/db/migrations/ | ||||||
|  |  | ||||||
|  | build: bindir | ||||||
|  | 	echo "build comments" | ||||||
|  | 	go build -o ${BINDIR}/comments cmd/server/main.go | ||||||
|  |  | ||||||
| bindir: | bindir: | ||||||
| 	mkdir -p ${BINDIR} | 	mkdir -p ${BINDIR} | ||||||
|  |  | ||||||
| build: bindir | # Used for CI | ||||||
| 	echo "build comments" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| run-migrations: | run-migrations: | ||||||
| 	echo "run migrations" | 	$(GOOSE) -dir $(PROD_MIGRATIONS) postgres "postgresql://$(PROD_USER):$(PROD_PASS)@$(PROD_DB):5432/comments_db?sslmode=disable" up | ||||||
|  |  | ||||||
|  | db-create-migration: | ||||||
|  | 	$(BINDIR)/goose -dir $(MIGRATIONS_FOLDER) create -s $(n) sql | ||||||
|  |  | ||||||
|  | db-migrate: | ||||||
|  | 	$(BINDIR)/goose -dir $(MIGRATIONS_FOLDER) postgres "$(LOCAL_DB_DSN)" up | ||||||
|  |  | ||||||
|  | db-migrate-down: | ||||||
|  | 	$(BINDIR)/goose -dir $(MIGRATIONS_FOLDER) postgres "$(LOCAL_DB_DSN)" down | ||||||
|  |  | ||||||
|  | db-reset-local: | ||||||
|  | 	psql -c "drop database if exists \"$(LOCAL_DB_NAME)\"" | ||||||
|  | 	psql -c "create database \"$(LOCAL_DB_NAME)\"" | ||||||
|  | 	make db-migrate | ||||||
|  |  | ||||||
|  | .PHONY: generate-sqlc | ||||||
|  | generate-sqlc: | ||||||
|  | 	$(BINDIR)/sqlc generate | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								comments/db/migrations/00001_create_comments.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								comments/db/migrations/00001_create_comments.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | CREATE TABLE comments ( | ||||||
|  |   id          BIGSERIAL PRIMARY KEY, | ||||||
|  |   user_id     BIGINT NOT NULL, | ||||||
|  |   sku         BIGINT NOT NULL, | ||||||
|  |   text        VARCHAR(255) NOT NULL, | ||||||
|  |   created_at  TIMESTAMP(3) NOT NULL DEFAULT now() | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | CREATE INDEX ON comments(sku, created_at DESC, user_id ASC); | ||||||
|  | CREATE INDEX ON comments(user_id, created_at DESC); | ||||||
| @@ -1,3 +1,16 @@ | |||||||
| module route256/comments | module route256/comments | ||||||
|  |  | ||||||
| go 1.23.1 | go 1.23.1 | ||||||
|  |  | ||||||
|  | require github.com/go-playground/validator/v10 v10.27.0 | ||||||
|  |  | ||||||
|  | require ( | ||||||
|  | 	github.com/gabriel-vasile/mimetype v1.4.8 // indirect | ||||||
|  | 	github.com/go-playground/locales v0.14.1 // indirect | ||||||
|  | 	github.com/go-playground/universal-translator v0.18.1 // indirect | ||||||
|  | 	github.com/leodido/go-urn v1.4.0 // indirect | ||||||
|  | 	golang.org/x/crypto v0.33.0 // indirect | ||||||
|  | 	golang.org/x/net v0.34.0 // indirect | ||||||
|  | 	golang.org/x/sys v0.30.0 // indirect | ||||||
|  | 	golang.org/x/text v0.22.0 // indirect | ||||||
|  | ) | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								comments/go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								comments/go.sum
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||||
|  | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
|  | github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= | ||||||
|  | github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= | ||||||
|  | github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= | ||||||
|  | github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= | ||||||
|  | github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= | ||||||
|  | github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= | ||||||
|  | github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= | ||||||
|  | github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= | ||||||
|  | github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= | ||||||
|  | github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= | ||||||
|  | github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= | ||||||
|  | github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
|  | github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||||
|  | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||||
|  | golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= | ||||||
|  | golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= | ||||||
|  | golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= | ||||||
|  | golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= | ||||||
|  | golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= | ||||||
|  | golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||||
|  | golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= | ||||||
|  | golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= | ||||||
|  | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
|  | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
							
								
								
									
										87
									
								
								comments/infra/db/postgres/tx.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								comments/infra/db/postgres/tx.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | |||||||
|  | package postgres | ||||||
|  |  | ||||||
|  | // From https://gitlab.ozon.dev/go/classroom-18/students/week-4-workshop/-/blob/master/internal/infra/postgres/tx.go | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  |  | ||||||
|  | 	"github.com/jackc/pgx/v5" | ||||||
|  | 	"github.com/jackc/pgx/v5/pgxpool" | ||||||
|  | 	"github.com/opentracing/opentracing-go" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Tx транзакция. | ||||||
|  | type Tx pgx.Tx | ||||||
|  |  | ||||||
|  | type txKey struct{} | ||||||
|  |  | ||||||
|  | func ctxWithTx(ctx context.Context, tx pgx.Tx) context.Context { | ||||||
|  | 	return context.WithValue(ctx, txKey{}, tx) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TxFromCtx(ctx context.Context) (pgx.Tx, bool) { | ||||||
|  | 	tx, ok := ctx.Value(txKey{}).(pgx.Tx) | ||||||
|  |  | ||||||
|  | 	return tx, ok | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type TxManager struct { | ||||||
|  | 	write *pgxpool.Pool | ||||||
|  | 	read  *pgxpool.Pool | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTxManager(write, read *pgxpool.Pool) *TxManager { | ||||||
|  | 	return &TxManager{ | ||||||
|  | 		write: write, | ||||||
|  | 		read:  read, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // WithTransaction выполняет fn в транзакции с дефолтным уровнем изоляции. | ||||||
|  | func (m *TxManager) WriteWithTransaction(ctx context.Context, fn func(ctx context.Context) error) (err error) { | ||||||
|  | 	return m.withTx(ctx, m.write, pgx.TxOptions{}, fn) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *TxManager) ReadWithTransaction(ctx context.Context, fn func(ctx context.Context) error) (err error) { | ||||||
|  | 	return m.withTx(ctx, m.read, pgx.TxOptions{}, fn) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // WithTransaction выполняет fn в транзакции с уровнем изоляции RepeatableRead. | ||||||
|  | func (m *TxManager) WriteWithRepeatableRead(ctx context.Context, fn func(ctx context.Context) error) (err error) { | ||||||
|  | 	return m.withTx(ctx, m.write, pgx.TxOptions{IsoLevel: pgx.RepeatableRead}, fn) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *TxManager) ReadWithRepeatableRead(ctx context.Context, fn func(ctx context.Context) error) (err error) { | ||||||
|  | 	return m.withTx(ctx, m.read, pgx.TxOptions{IsoLevel: pgx.RepeatableRead}, fn) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // WithTx выполняет fn в транзакции. | ||||||
|  | func (m *TxManager) withTx(ctx context.Context, pool *pgxpool.Pool, options pgx.TxOptions, fn func(ctx context.Context) error) (err error) { | ||||||
|  | 	var span opentracing.Span | ||||||
|  | 	span, ctx = opentracing.StartSpanFromContext(ctx, "Transaction") | ||||||
|  | 	defer span.Finish() | ||||||
|  |  | ||||||
|  | 	tx, err := pool.BeginTx(ctx, options) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	ctx = ctxWithTx(ctx, tx) | ||||||
|  |  | ||||||
|  | 	defer func() { | ||||||
|  | 		if p := recover(); p != nil { | ||||||
|  | 			// a panic occurred, rollback and repanic | ||||||
|  | 			_ = tx.Rollback(ctx) | ||||||
|  | 			panic(p) | ||||||
|  | 		} else if err != nil { | ||||||
|  | 			// something went wrong, rollback | ||||||
|  | 			_ = tx.Rollback(ctx) | ||||||
|  | 		} else { | ||||||
|  | 			// all good, commit | ||||||
|  | 			err = tx.Commit(ctx) | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  |  | ||||||
|  | 	err = fn(ctx) | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								comments/infra/repository/sqlc/db.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								comments/infra/repository/sqlc/db.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | // Code generated by sqlc. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | //   sqlc v1.29.0 | ||||||
|  |  | ||||||
|  | package sqlc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  |  | ||||||
|  | 	"github.com/jackc/pgx/v5" | ||||||
|  | 	"github.com/jackc/pgx/v5/pgconn" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type DBTX interface { | ||||||
|  | 	Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) | ||||||
|  | 	Query(context.Context, string, ...interface{}) (pgx.Rows, error) | ||||||
|  | 	QueryRow(context.Context, string, ...interface{}) pgx.Row | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func New(db DBTX) *Queries { | ||||||
|  | 	return &Queries{db: db} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type Queries struct { | ||||||
|  | 	db DBTX | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (q *Queries) WithTx(tx pgx.Tx) *Queries { | ||||||
|  | 	return &Queries{ | ||||||
|  | 		db: tx, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								comments/infra/repository/sqlc/models.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								comments/infra/repository/sqlc/models.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | // Code generated by sqlc. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | //   sqlc v1.29.0 | ||||||
|  |  | ||||||
|  | package sqlc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/jackc/pgx/v5/pgtype" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Comment struct { | ||||||
|  | 	ID        int64 | ||||||
|  | 	UserID    int64 | ||||||
|  | 	Sku       int64 | ||||||
|  | 	Text      string | ||||||
|  | 	CreatedAt pgtype.Timestamp | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								comments/infra/repository/sqlc/querier.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								comments/infra/repository/sqlc/querier.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | // Code generated by sqlc. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | //   sqlc v1.29.0 | ||||||
|  |  | ||||||
|  | package sqlc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Querier interface { | ||||||
|  | 	GetCommentByID(ctx context.Context, id int64) (*Comment, error) | ||||||
|  | 	InsertComment(ctx context.Context, arg *InsertCommentParams) (*Comment, error) | ||||||
|  | 	ListCommentsBySku(ctx context.Context, sku int64) ([]*Comment, error) | ||||||
|  | 	ListCommentsByUser(ctx context.Context, userID int64) ([]*Comment, error) | ||||||
|  | 	UpdateComment(ctx context.Context, arg *UpdateCommentParams) (*Comment, error) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var _ Querier = (*Queries)(nil) | ||||||
							
								
								
									
										24
									
								
								comments/infra/repository/sqlc/query.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								comments/infra/repository/sqlc/query.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | -- name: InsertComment :one | ||||||
|  | INSERT INTO comments (user_id, sku, text) VALUES ($1, $2, $3) | ||||||
|  | RETURNING id, user_id, sku, text, created_at; | ||||||
|  |  | ||||||
|  | -- name: GetCommentByID :one | ||||||
|  | SELECT id, user_id, sku, text, created_at FROM comments WHERE id = $1; | ||||||
|  |  | ||||||
|  | -- name: UpdateComment :one | ||||||
|  | UPDATE comments | ||||||
|  | SET text = $2 | ||||||
|  | WHERE id = $1 | ||||||
|  | RETURNING id, user_id, sku, text, created_at; | ||||||
|  |  | ||||||
|  | -- name: ListCommentsBySku :many | ||||||
|  | SELECT id, user_id, sku, text, created_at | ||||||
|  | FROM comments | ||||||
|  | WHERE sku = $1 | ||||||
|  | ORDER BY created_at DESC, user_id ASC; | ||||||
|  |  | ||||||
|  | -- name: ListCommentsByUser :many | ||||||
|  | SELECT id, user_id, sku, text, created_at | ||||||
|  | FROM comments | ||||||
|  | WHERE user_id = $1 | ||||||
|  | ORDER BY created_at DESC; | ||||||
							
								
								
									
										142
									
								
								comments/infra/repository/sqlc/query.sql.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								comments/infra/repository/sqlc/query.sql.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | |||||||
|  | // Code generated by sqlc. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | //   sqlc v1.29.0 | ||||||
|  | // source: query.sql | ||||||
|  |  | ||||||
|  | package sqlc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const getCommentByID = `-- name: GetCommentByID :one | ||||||
|  | SELECT id, user_id, sku, text, created_at FROM comments WHERE id = $1 | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | func (q *Queries) GetCommentByID(ctx context.Context, id int64) (*Comment, error) { | ||||||
|  | 	row := q.db.QueryRow(ctx, getCommentByID, id) | ||||||
|  | 	var i Comment | ||||||
|  | 	err := row.Scan( | ||||||
|  | 		&i.ID, | ||||||
|  | 		&i.UserID, | ||||||
|  | 		&i.Sku, | ||||||
|  | 		&i.Text, | ||||||
|  | 		&i.CreatedAt, | ||||||
|  | 	) | ||||||
|  | 	return &i, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const insertComment = `-- name: InsertComment :one | ||||||
|  | INSERT INTO comments (user_id, sku, text) VALUES ($1, $2, $3) | ||||||
|  | RETURNING id, user_id, sku, text, created_at | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | type InsertCommentParams struct { | ||||||
|  | 	UserID int64 | ||||||
|  | 	Sku    int64 | ||||||
|  | 	Text   string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (q *Queries) InsertComment(ctx context.Context, arg *InsertCommentParams) (*Comment, error) { | ||||||
|  | 	row := q.db.QueryRow(ctx, insertComment, arg.UserID, arg.Sku, arg.Text) | ||||||
|  | 	var i Comment | ||||||
|  | 	err := row.Scan( | ||||||
|  | 		&i.ID, | ||||||
|  | 		&i.UserID, | ||||||
|  | 		&i.Sku, | ||||||
|  | 		&i.Text, | ||||||
|  | 		&i.CreatedAt, | ||||||
|  | 	) | ||||||
|  | 	return &i, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const listCommentsBySku = `-- name: ListCommentsBySku :many | ||||||
|  | SELECT id, user_id, sku, text, created_at | ||||||
|  | FROM comments | ||||||
|  | WHERE sku = $1 | ||||||
|  | ORDER BY created_at DESC, user_id ASC | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | func (q *Queries) ListCommentsBySku(ctx context.Context, sku int64) ([]*Comment, error) { | ||||||
|  | 	rows, err := q.db.Query(ctx, listCommentsBySku, sku) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	defer rows.Close() | ||||||
|  | 	var items []*Comment | ||||||
|  | 	for rows.Next() { | ||||||
|  | 		var i Comment | ||||||
|  | 		if err := rows.Scan( | ||||||
|  | 			&i.ID, | ||||||
|  | 			&i.UserID, | ||||||
|  | 			&i.Sku, | ||||||
|  | 			&i.Text, | ||||||
|  | 			&i.CreatedAt, | ||||||
|  | 		); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		items = append(items, &i) | ||||||
|  | 	} | ||||||
|  | 	if err := rows.Err(); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return items, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const listCommentsByUser = `-- name: ListCommentsByUser :many | ||||||
|  | SELECT id, user_id, sku, text, created_at | ||||||
|  | FROM comments | ||||||
|  | WHERE user_id = $1 | ||||||
|  | ORDER BY created_at DESC | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | func (q *Queries) ListCommentsByUser(ctx context.Context, userID int64) ([]*Comment, error) { | ||||||
|  | 	rows, err := q.db.Query(ctx, listCommentsByUser, userID) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	defer rows.Close() | ||||||
|  | 	var items []*Comment | ||||||
|  | 	for rows.Next() { | ||||||
|  | 		var i Comment | ||||||
|  | 		if err := rows.Scan( | ||||||
|  | 			&i.ID, | ||||||
|  | 			&i.UserID, | ||||||
|  | 			&i.Sku, | ||||||
|  | 			&i.Text, | ||||||
|  | 			&i.CreatedAt, | ||||||
|  | 		); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		items = append(items, &i) | ||||||
|  | 	} | ||||||
|  | 	if err := rows.Err(); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return items, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const updateComment = `-- name: UpdateComment :one | ||||||
|  | UPDATE comments | ||||||
|  | SET text = $2 | ||||||
|  | WHERE id = $1 | ||||||
|  | RETURNING id, user_id, sku, text, created_at | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | type UpdateCommentParams struct { | ||||||
|  | 	ID   int64 | ||||||
|  | 	Text string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (q *Queries) UpdateComment(ctx context.Context, arg *UpdateCommentParams) (*Comment, error) { | ||||||
|  | 	row := q.db.QueryRow(ctx, updateComment, arg.ID, arg.Text) | ||||||
|  | 	var i Comment | ||||||
|  | 	err := row.Scan( | ||||||
|  | 		&i.ID, | ||||||
|  | 		&i.UserID, | ||||||
|  | 		&i.Sku, | ||||||
|  | 		&i.Text, | ||||||
|  | 		&i.CreatedAt, | ||||||
|  | 	) | ||||||
|  | 	return &i, err | ||||||
|  | } | ||||||
							
								
								
									
										148
									
								
								comments/infra/repository/sqlc/repository.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								comments/infra/repository/sqlc/repository.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | |||||||
|  | package sqlc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"errors" | ||||||
|  | 	"sort" | ||||||
|  |  | ||||||
|  | 	"route256/comments/internal/domain/entity" | ||||||
|  | 	"route256/comments/internal/domain/model" | ||||||
|  |  | ||||||
|  | 	"github.com/jackc/pgx/v5" | ||||||
|  | 	"github.com/jackc/pgx/v5/pgxpool" | ||||||
|  | 	"github.com/rs/zerolog/log" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type commentsRepo struct { | ||||||
|  | 	shard1 *pgxpool.Pool | ||||||
|  | 	shard2 *pgxpool.Pool | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewCommentsRepository(shard1, shard2 *pgxpool.Pool) *commentsRepo { | ||||||
|  | 	return &commentsRepo{ | ||||||
|  | 		shard1: shard1, | ||||||
|  | 		shard2: shard2, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) pickShard(sku int64) *pgxpool.Pool { | ||||||
|  | 	if sku%2 == 0 { | ||||||
|  | 		return r.shard1 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return r.shard2 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) GetCommentByID(ctx context.Context, id int64) (*Comment, error) { | ||||||
|  | 	q1 := New(r.shard1) | ||||||
|  | 	c, err := q1.GetCommentByID(ctx, id) | ||||||
|  | 	switch { | ||||||
|  | 	case err == nil: | ||||||
|  | 		return c, nil | ||||||
|  | 	case errors.Is(err, pgx.ErrNoRows): | ||||||
|  | 		log.Trace().Msgf("comment with id %d not found in shard 1", id) | ||||||
|  | 	default: | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	q2 := New(r.shard2) | ||||||
|  | 	c2, err2 := q2.GetCommentByID(ctx, id) | ||||||
|  | 	switch { | ||||||
|  | 	case err2 == nil: | ||||||
|  | 		return c2, nil | ||||||
|  | 	case errors.Is(err2, pgx.ErrNoRows): | ||||||
|  | 		return nil, model.ErrCommentNotFound | ||||||
|  | 	default: | ||||||
|  | 		return nil, err2 | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) InsertComment(ctx context.Context, comment *entity.Comment) (*Comment, error) { | ||||||
|  | 	shard := r.pickShard(comment.SKU) | ||||||
|  | 	q := New(shard) | ||||||
|  |  | ||||||
|  | 	req := &InsertCommentParams{ | ||||||
|  | 		UserID: comment.UserID, | ||||||
|  | 		Sku:    comment.SKU, | ||||||
|  | 		Text:   comment.Text, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	c, err := q.InsertComment(ctx, req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return c, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) ListCommentsBySku(ctx context.Context, sku int64) ([]*Comment, error) { | ||||||
|  | 	shard := r.pickShard(sku) | ||||||
|  | 	q := New(shard) | ||||||
|  |  | ||||||
|  | 	list, err := q.ListCommentsBySku(ctx, sku) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	out := make([]*Comment, len(list)) | ||||||
|  | 	copy(out, list) | ||||||
|  |  | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) ListCommentsByUser(ctx context.Context, userID int64) ([]*Comment, error) { | ||||||
|  | 	q1 := New(r.shard1) | ||||||
|  | 	l1, err1 := q1.ListCommentsByUser(ctx, userID) | ||||||
|  | 	if err1 != nil { | ||||||
|  | 		return nil, err1 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	q2 := New(r.shard2) | ||||||
|  | 	l2, err2 := q2.ListCommentsByUser(ctx, userID) | ||||||
|  | 	if err2 != nil { | ||||||
|  | 		return nil, err2 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	merged := make([]*Comment, 0, len(l1)+len(l2)) | ||||||
|  | 	merged = append(merged, l1...) | ||||||
|  | 	merged = append(merged, l2...) | ||||||
|  |  | ||||||
|  | 	sort.Slice(merged, func(i, j int) bool { | ||||||
|  | 		if merged[i].CreatedAt.Time.Equal(merged[j].CreatedAt.Time) { | ||||||
|  | 			return merged[i].UserID < merged[j].UserID | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return merged[i].CreatedAt.Time.After(merged[j].CreatedAt.Time) | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	return merged, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *commentsRepo) UpdateComment(ctx context.Context, comment *entity.Comment) (*Comment, error) { | ||||||
|  | 	req := &UpdateCommentParams{ | ||||||
|  | 		ID:   comment.ID, | ||||||
|  | 		Text: comment.Text, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	q1 := New(r.shard1) | ||||||
|  | 	c, err := q1.UpdateComment(ctx, req) | ||||||
|  | 	switch { | ||||||
|  | 	case err == nil: | ||||||
|  | 		return c, nil | ||||||
|  | 	case errors.Is(err, pgx.ErrNoRows): | ||||||
|  | 		log.Trace().Msgf("comment with id %d not found in shard 1", req.ID) | ||||||
|  | 	default: | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	q2 := New(r.shard2) | ||||||
|  | 	c2, err2 := q2.UpdateComment(ctx, req) | ||||||
|  | 	switch { | ||||||
|  | 	case err2 == nil: | ||||||
|  | 		return c2, nil | ||||||
|  | 	case errors.Is(err2, pgx.ErrNoRows): | ||||||
|  | 		return nil, model.ErrCommentNotFound | ||||||
|  | 	default: | ||||||
|  | 		return nil, err2 | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								comments/internal/domain/entity/comment.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								comments/internal/domain/entity/comment.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | package entity | ||||||
|  |  | ||||||
|  | type Comment struct { | ||||||
|  | 	ID        int64 | ||||||
|  | 	UserID    int64 | ||||||
|  | 	SKU       int64 | ||||||
|  | 	CreatedAt string | ||||||
|  | 	Text      string | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								comments/internal/domain/model/comment.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								comments/internal/domain/model/comment.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | package model | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Comment struct { | ||||||
|  | 	ID        int64 `validate:"gt=0"` | ||||||
|  | 	UserID    int64 `validate:"gt=0"` | ||||||
|  | 	SKU       int64 `validate:"gt=0"` | ||||||
|  | 	CreatedAt time.Time | ||||||
|  | 	Text      string `validate:"lte=255,gt=0"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *Comment) Validate() error { | ||||||
|  | 	if err := validate.Struct(c); err != nil { | ||||||
|  | 		return fmt.Errorf("invalid requested values: %w", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								comments/internal/domain/model/errors.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								comments/internal/domain/model/errors.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | package model | ||||||
|  |  | ||||||
|  | import "errors" | ||||||
|  |  | ||||||
|  | var ErrCommentNotFound = errors.New("comment not found") | ||||||
							
								
								
									
										9
									
								
								comments/internal/domain/model/validate.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								comments/internal/domain/model/validate.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | package model | ||||||
|  |  | ||||||
|  | import "github.com/go-playground/validator/v10" | ||||||
|  |  | ||||||
|  | var validate *validator.Validate | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	validate = validator.New() | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								comments/internal/domain/service/service.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								comments/internal/domain/service/service.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | package service | ||||||
|  |  | ||||||
|  | // TODO | ||||||
							
								
								
									
										15
									
								
								comments/sqlc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								comments/sqlc.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | version: "2" | ||||||
|  | sql: | ||||||
|  |   - engine: "postgresql" | ||||||
|  |     queries: "infra/repository/sqlc/query.sql" | ||||||
|  |     schema: "db/migrations" | ||||||
|  |     gen: | ||||||
|  |       go: | ||||||
|  |         package: "sqlc" | ||||||
|  |         out: "infra/repository/sqlc" | ||||||
|  |         sql_package: "pgx/v5" | ||||||
|  |         emit_interface: true | ||||||
|  |         emit_pointers_for_null_types: true | ||||||
|  |         emit_result_struct_pointers: true | ||||||
|  |         emit_params_struct_pointers: true | ||||||
|  |         omit_unused_structs: true | ||||||
| @@ -75,6 +75,28 @@ services: | |||||||
|     ports: |     ports: | ||||||
|       - "5434:5432" |       - "5434:5432" | ||||||
|  |  | ||||||
|  |   postgres-comments-shard-1: | ||||||
|  |     image: gitlab-registry.ozon.dev/go/classroom-18/students/base/postgres:16 | ||||||
|  |     environment: | ||||||
|  |       POSTGRES_DB: comments_db | ||||||
|  |       POSTGRES_USER: comments-user-1 | ||||||
|  |       POSTGRES_PASSWORD: comments-password-1 | ||||||
|  |     ports: | ||||||
|  |       - "5432:5432" | ||||||
|  |     volumes: | ||||||
|  |       - shard1-data:/var/lib/postgresql/data | ||||||
|  |  | ||||||
|  |   postgres-comments-shard-2: | ||||||
|  |     image: gitlab-registry.ozon.dev/go/classroom-18/students/base/postgres:16 | ||||||
|  |     environment: | ||||||
|  |       POSTGRES_DB: comments_db | ||||||
|  |       POSTGRES_USER: comments-user-2 | ||||||
|  |       POSTGRES_PASSWORD: comments-password-2 | ||||||
|  |     ports: | ||||||
|  |       - "5432:5432" | ||||||
|  |     volumes: | ||||||
|  |       - shard2-data:/var/lib/postgresql/data | ||||||
|  |  | ||||||
|   kafka-ui: |   kafka-ui: | ||||||
|     container_name: kafka-ui |     container_name: kafka-ui | ||||||
|     image: provectuslabs/kafka-ui:latest |     image: provectuslabs/kafka-ui:latest | ||||||
|   | |||||||
| @@ -97,3 +97,6 @@ notifier-generate: | |||||||
|  |  | ||||||
| comments-generate: | comments-generate: | ||||||
| 	$(call generate,comments) | 	$(call generate,comments) | ||||||
|  | 	mkdir -p "api/openapiv2" | ||||||
|  | 	$(foreach f,$(shell find api/comments/v1 -type f -name '*.proto'),$(call proto_gen,$(f),comments)) | ||||||
|  | 	cd comments && go mod tidy | ||||||
|   | |||||||
							
								
								
									
										927
									
								
								pkg/api/comments/v1/comments.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										927
									
								
								pkg/api/comments/v1/comments.pb.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,927 @@ | |||||||
|  | // Code generated by protoc-gen-go. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | // 	protoc-gen-go v1.28.1 | ||||||
|  | // 	protoc        v6.30.0 | ||||||
|  | // source: comments/v1/comments.proto | ||||||
|  |  | ||||||
|  | package comments | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	_ "github.com/envoyproxy/protoc-gen-validate/validate" | ||||||
|  | 	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" | ||||||
|  | 	_ "google.golang.org/genproto/googleapis/api/annotations" | ||||||
|  | 	protoreflect "google.golang.org/protobuf/reflect/protoreflect" | ||||||
|  | 	protoimpl "google.golang.org/protobuf/runtime/protoimpl" | ||||||
|  | 	_ "google.golang.org/protobuf/types/known/emptypb" | ||||||
|  | 	reflect "reflect" | ||||||
|  | 	sync "sync" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Verify that this generated code is sufficiently up-to-date. | ||||||
|  | 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | ||||||
|  | 	// Verify that runtime/protoimpl is sufficiently up-to-date. | ||||||
|  | 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Comment struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Id        int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` | ||||||
|  | 	UserId    int64  `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | ||||||
|  | 	Sku       int64  `protobuf:"varint,3,opt,name=sku,proto3" json:"sku,omitempty"` | ||||||
|  | 	Text      string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"` | ||||||
|  | 	CreatedAt string `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // RFC3339 with ms | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) Reset() { | ||||||
|  | 	*x = Comment{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[0] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*Comment) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *Comment) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[0] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use Comment.ProtoReflect.Descriptor instead. | ||||||
|  | func (*Comment) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{0} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) GetId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Id | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) GetUserId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.UserId | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) GetSku() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Sku | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) GetText() string { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Text | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *Comment) GetCreatedAt() string { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.CreatedAt | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type CreateCommentRequest struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	UserId int64  `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | ||||||
|  | 	Sku    int64  `protobuf:"varint,2,opt,name=sku,proto3" json:"sku,omitempty"` | ||||||
|  | 	Text   string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) Reset() { | ||||||
|  | 	*x = CreateCommentRequest{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[1] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*CreateCommentRequest) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[1] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use CreateCommentRequest.ProtoReflect.Descriptor instead. | ||||||
|  | func (*CreateCommentRequest) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{1} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) GetUserId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.UserId | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) GetSku() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Sku | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentRequest) GetText() string { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Text | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type CreateCommentResponse struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Comment *Comment `protobuf:"bytes,1,opt,name=comment,proto3" json:"comment,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentResponse) Reset() { | ||||||
|  | 	*x = CreateCommentResponse{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[2] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentResponse) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*CreateCommentResponse) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *CreateCommentResponse) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[2] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use CreateCommentResponse.ProtoReflect.Descriptor instead. | ||||||
|  | func (*CreateCommentResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{2} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *CreateCommentResponse) GetComment() *Comment { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Comment | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type GetCommentRequest struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentRequest) Reset() { | ||||||
|  | 	*x = GetCommentRequest{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[3] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentRequest) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*GetCommentRequest) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *GetCommentRequest) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[3] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use GetCommentRequest.ProtoReflect.Descriptor instead. | ||||||
|  | func (*GetCommentRequest) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{3} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentRequest) GetId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Id | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type GetCommentResponse struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Comment *Comment `protobuf:"bytes,1,opt,name=comment,proto3" json:"comment,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentResponse) Reset() { | ||||||
|  | 	*x = GetCommentResponse{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[4] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentResponse) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*GetCommentResponse) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *GetCommentResponse) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[4] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use GetCommentResponse.ProtoReflect.Descriptor instead. | ||||||
|  | func (*GetCommentResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{4} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *GetCommentResponse) GetComment() *Comment { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Comment | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type UpdateCommentRequest struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Id     int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` | ||||||
|  | 	UserId int64  `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | ||||||
|  | 	Text   string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) Reset() { | ||||||
|  | 	*x = UpdateCommentRequest{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[5] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*UpdateCommentRequest) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[5] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use UpdateCommentRequest.ProtoReflect.Descriptor instead. | ||||||
|  | func (*UpdateCommentRequest) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{5} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) GetId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Id | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) GetUserId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.UserId | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentRequest) GetText() string { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Text | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type UpdateCommentResponse struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Comment *Comment `protobuf:"bytes,1,opt,name=comment,proto3" json:"comment,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentResponse) Reset() { | ||||||
|  | 	*x = UpdateCommentResponse{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[6] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentResponse) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*UpdateCommentResponse) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentResponse) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[6] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use UpdateCommentResponse.ProtoReflect.Descriptor instead. | ||||||
|  | func (*UpdateCommentResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{6} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *UpdateCommentResponse) GetComment() *Comment { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Comment | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ListBySkuRequest struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Sku int64 `protobuf:"varint,1,opt,name=sku,proto3" json:"sku,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuRequest) Reset() { | ||||||
|  | 	*x = ListBySkuRequest{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[7] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuRequest) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*ListBySkuRequest) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *ListBySkuRequest) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[7] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use ListBySkuRequest.ProtoReflect.Descriptor instead. | ||||||
|  | func (*ListBySkuRequest) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{7} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuRequest) GetSku() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Sku | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ListBySkuResponse struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Comments []*Comment `protobuf:"bytes,1,rep,name=comments,proto3" json:"comments,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuResponse) Reset() { | ||||||
|  | 	*x = ListBySkuResponse{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[8] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuResponse) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*ListBySkuResponse) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *ListBySkuResponse) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[8] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use ListBySkuResponse.ProtoReflect.Descriptor instead. | ||||||
|  | func (*ListBySkuResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{8} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListBySkuResponse) GetComments() []*Comment { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Comments | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ListByUserRequest struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserRequest) Reset() { | ||||||
|  | 	*x = ListByUserRequest{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[9] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserRequest) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*ListByUserRequest) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *ListByUserRequest) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[9] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use ListByUserRequest.ProtoReflect.Descriptor instead. | ||||||
|  | func (*ListByUserRequest) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{9} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserRequest) GetUserId() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.UserId | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ListByUserResponse struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
|  | 	Comments []*Comment `protobuf:"bytes,1,rep,name=comments,proto3" json:"comments,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserResponse) Reset() { | ||||||
|  | 	*x = ListByUserResponse{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_comments_v1_comments_proto_msgTypes[10] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserResponse) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (*ListByUserResponse) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (x *ListByUserResponse) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_comments_v1_comments_proto_msgTypes[10] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Use ListByUserResponse.ProtoReflect.Descriptor instead. | ||||||
|  | func (*ListByUserResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescGZIP(), []int{10} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (x *ListByUserResponse) GetComments() []*Comment { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Comments | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var File_comments_v1_comments_proto protoreflect.FileDescriptor | ||||||
|  |  | ||||||
|  | var file_comments_v1_comments_proto_rawDesc = []byte{ | ||||||
|  | 	0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, | ||||||
|  | 	0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, | ||||||
|  | 	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, | ||||||
|  | 	0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, | ||||||
|  | 	0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, | ||||||
|  | 	0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, | ||||||
|  | 	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||||
|  | 	0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, | ||||||
|  | 	0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, | ||||||
|  | 	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||||
|  | 	0x22, 0x9e, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x02, | ||||||
|  | 	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, | ||||||
|  | 	0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, | ||||||
|  | 	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, | ||||||
|  | 	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x03, | ||||||
|  | 	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x03, 0x73, | ||||||
|  | 	0x6b, 0x75, 0x12, 0x1e, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, | ||||||
|  | 	0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x04, 0x74, 0x65, | ||||||
|  | 	0x78, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, | ||||||
|  | 	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, | ||||||
|  | 	0x74, 0x22, 0x73, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, | ||||||
|  | 	0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, | ||||||
|  | 	0x02, 0x20, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x73, | ||||||
|  | 	0x6b, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, | ||||||
|  | 	0x00, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x1e, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, | ||||||
|  | 	0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, | ||||||
|  | 	0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3b, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, | ||||||
|  | 	0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||||
|  | 	0x22, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, | ||||||
|  | 	0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, | ||||||
|  | 	0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, | ||||||
|  | 	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, | ||||||
|  | 	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, | ||||||
|  | 	0x64, 0x22, 0x38, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, | ||||||
|  | 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x71, 0x0a, 0x14, 0x55, | ||||||
|  | 	0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, | ||||||
|  | 	0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, | ||||||
|  | 	0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, | ||||||
|  | 	0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, | ||||||
|  | 	0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, | ||||||
|  | 	0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, | ||||||
|  | 	0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xff, 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3b, | ||||||
|  | 	0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, | ||||||
|  | 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x10, 0x4c, | ||||||
|  | 	0x69, 0x73, 0x74, 0x42, 0x79, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, | ||||||
|  | 	0x19, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, | ||||||
|  | 	0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x22, 0x39, 0x0a, 0x11, 0x4c, 0x69, | ||||||
|  | 	0x73, 0x74, 0x42, 0x79, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||||
|  | 	0x24, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, | ||||||
|  | 	0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6d, | ||||||
|  | 	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x35, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x55, | ||||||
|  | 	0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, | ||||||
|  | 	0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, | ||||||
|  | 	0x22, 0x02, 0x20, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x12, | ||||||
|  | 	0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||||
|  | 	0x73, 0x65, 0x12, 0x24, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, | ||||||
|  | 	0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, | ||||||
|  | 	0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x32, 0xde, 0x04, 0x0a, 0x08, 0x43, 0x6f, 0x6d, | ||||||
|  | 	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x15, 0x2e, 0x43, | ||||||
|  | 	0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, | ||||||
|  | 	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, | ||||||
|  | 	0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, | ||||||
|  | 	0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x64, | ||||||
|  | 	0x64, 0x3a, 0x01, 0x2a, 0x12, 0x51, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x42, 0x79, 0x49, 0x64, 0x12, | ||||||
|  | 	0x12, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, | ||||||
|  | 	0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, | ||||||
|  | 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, | ||||||
|  | 	0x22, 0x12, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x65, 0x74, 0x2d, 0x62, | ||||||
|  | 	0x79, 0x2d, 0x69, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x4f, 0x0a, 0x04, 0x45, 0x64, 0x69, 0x74, 0x12, | ||||||
|  | 	0x15, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, | ||||||
|  | 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, | ||||||
|  | 	0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, | ||||||
|  | 	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, | ||||||
|  | 	0x2f, 0x65, 0x64, 0x69, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x53, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, | ||||||
|  | 	0x42, 0x79, 0x53, 0x6b, 0x75, 0x12, 0x11, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x53, 0x6b, | ||||||
|  | 	0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, | ||||||
|  | 	0x79, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, | ||||||
|  | 	0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6c, | ||||||
|  | 	0x69, 0x73, 0x74, 0x2d, 0x62, 0x79, 0x2d, 0x73, 0x6b, 0x75, 0x3a, 0x01, 0x2a, 0x12, 0x57, 0x0a, | ||||||
|  | 	0x0a, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e, 0x4c, 0x69, | ||||||
|  | 	0x73, 0x74, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | ||||||
|  | 	0x13, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, | ||||||
|  | 	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x63, | ||||||
|  | 	0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x62, 0x79, 0x2d, 0x75, | ||||||
|  | 	0x73, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x1a, 0xb0, 0x01, 0x92, 0x41, 0xac, 0x01, 0x12, 0x0f, 0x43, | ||||||
|  | 	0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x98, | ||||||
|  | 	0x01, 0x0a, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, | ||||||
|  | 	0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, | ||||||
|  | 	0x77, 0x61, 0x79, 0x12, 0x74, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, | ||||||
|  | 	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, | ||||||
|  | 	0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, | ||||||
|  | 	0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x65, 0x78, | ||||||
|  | 	0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, | ||||||
|  | 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, | ||||||
|  | 	0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, | ||||||
|  | 	0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x6d, 0x5a, 0x25, 0x72, 0x6f, 0x75, | ||||||
|  | 	0x74, 0x65, 0x32, 0x35, 0x36, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, | ||||||
|  | 	0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, | ||||||
|  | 	0x74, 0x73, 0x92, 0x41, 0x43, 0x12, 0x19, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, | ||||||
|  | 	0x73, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x32, 0x05, 0x31, 0x2e, 0x30, 0x2e, 0x30, | ||||||
|  | 	0x2a, 0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, | ||||||
|  | 	0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, | ||||||
|  | 	0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	file_comments_v1_comments_proto_rawDescOnce sync.Once | ||||||
|  | 	file_comments_v1_comments_proto_rawDescData = file_comments_v1_comments_proto_rawDesc | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func file_comments_v1_comments_proto_rawDescGZIP() []byte { | ||||||
|  | 	file_comments_v1_comments_proto_rawDescOnce.Do(func() { | ||||||
|  | 		file_comments_v1_comments_proto_rawDescData = protoimpl.X.CompressGZIP(file_comments_v1_comments_proto_rawDescData) | ||||||
|  | 	}) | ||||||
|  | 	return file_comments_v1_comments_proto_rawDescData | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var file_comments_v1_comments_proto_msgTypes = make([]protoimpl.MessageInfo, 11) | ||||||
|  | var file_comments_v1_comments_proto_goTypes = []interface{}{ | ||||||
|  | 	(*Comment)(nil),               // 0: Comment | ||||||
|  | 	(*CreateCommentRequest)(nil),  // 1: CreateCommentRequest | ||||||
|  | 	(*CreateCommentResponse)(nil), // 2: CreateCommentResponse | ||||||
|  | 	(*GetCommentRequest)(nil),     // 3: GetCommentRequest | ||||||
|  | 	(*GetCommentResponse)(nil),    // 4: GetCommentResponse | ||||||
|  | 	(*UpdateCommentRequest)(nil),  // 5: UpdateCommentRequest | ||||||
|  | 	(*UpdateCommentResponse)(nil), // 6: UpdateCommentResponse | ||||||
|  | 	(*ListBySkuRequest)(nil),      // 7: ListBySkuRequest | ||||||
|  | 	(*ListBySkuResponse)(nil),     // 8: ListBySkuResponse | ||||||
|  | 	(*ListByUserRequest)(nil),     // 9: ListByUserRequest | ||||||
|  | 	(*ListByUserResponse)(nil),    // 10: ListByUserResponse | ||||||
|  | } | ||||||
|  | var file_comments_v1_comments_proto_depIdxs = []int32{ | ||||||
|  | 	0,  // 0: CreateCommentResponse.comment:type_name -> Comment | ||||||
|  | 	0,  // 1: GetCommentResponse.comment:type_name -> Comment | ||||||
|  | 	0,  // 2: UpdateCommentResponse.comment:type_name -> Comment | ||||||
|  | 	0,  // 3: ListBySkuResponse.comments:type_name -> Comment | ||||||
|  | 	0,  // 4: ListByUserResponse.comments:type_name -> Comment | ||||||
|  | 	1,  // 5: Comments.Add:input_type -> CreateCommentRequest | ||||||
|  | 	3,  // 6: Comments.GetById:input_type -> GetCommentRequest | ||||||
|  | 	5,  // 7: Comments.Edit:input_type -> UpdateCommentRequest | ||||||
|  | 	7,  // 8: Comments.ListBySku:input_type -> ListBySkuRequest | ||||||
|  | 	9,  // 9: Comments.ListByUser:input_type -> ListByUserRequest | ||||||
|  | 	2,  // 10: Comments.Add:output_type -> CreateCommentResponse | ||||||
|  | 	4,  // 11: Comments.GetById:output_type -> GetCommentResponse | ||||||
|  | 	6,  // 12: Comments.Edit:output_type -> UpdateCommentResponse | ||||||
|  | 	8,  // 13: Comments.ListBySku:output_type -> ListBySkuResponse | ||||||
|  | 	10, // 14: Comments.ListByUser:output_type -> ListByUserResponse | ||||||
|  | 	10, // [10:15] is the sub-list for method output_type | ||||||
|  | 	5,  // [5:10] is the sub-list for method input_type | ||||||
|  | 	5,  // [5:5] is the sub-list for extension type_name | ||||||
|  | 	5,  // [5:5] is the sub-list for extension extendee | ||||||
|  | 	0,  // [0:5] is the sub-list for field type_name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { file_comments_v1_comments_proto_init() } | ||||||
|  | func file_comments_v1_comments_proto_init() { | ||||||
|  | 	if File_comments_v1_comments_proto != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if !protoimpl.UnsafeEnabled { | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*Comment); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*CreateCommentRequest); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*CreateCommentResponse); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*GetCommentRequest); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*GetCommentResponse); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*UpdateCommentRequest); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*UpdateCommentResponse); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*ListBySkuRequest); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*ListBySkuResponse); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*ListByUserRequest); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_comments_v1_comments_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*ListByUserResponse); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	type x struct{} | ||||||
|  | 	out := protoimpl.TypeBuilder{ | ||||||
|  | 		File: protoimpl.DescBuilder{ | ||||||
|  | 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||||
|  | 			RawDescriptor: file_comments_v1_comments_proto_rawDesc, | ||||||
|  | 			NumEnums:      0, | ||||||
|  | 			NumMessages:   11, | ||||||
|  | 			NumExtensions: 0, | ||||||
|  | 			NumServices:   1, | ||||||
|  | 		}, | ||||||
|  | 		GoTypes:           file_comments_v1_comments_proto_goTypes, | ||||||
|  | 		DependencyIndexes: file_comments_v1_comments_proto_depIdxs, | ||||||
|  | 		MessageInfos:      file_comments_v1_comments_proto_msgTypes, | ||||||
|  | 	}.Build() | ||||||
|  | 	File_comments_v1_comments_proto = out.File | ||||||
|  | 	file_comments_v1_comments_proto_rawDesc = nil | ||||||
|  | 	file_comments_v1_comments_proto_goTypes = nil | ||||||
|  | 	file_comments_v1_comments_proto_depIdxs = nil | ||||||
|  | } | ||||||
							
								
								
									
										471
									
								
								pkg/api/comments/v1/comments.pb.gw.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										471
									
								
								pkg/api/comments/v1/comments.pb.gw.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,471 @@ | |||||||
|  | // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. | ||||||
|  | // source: comments/v1/comments.proto | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package comments is a reverse proxy. | ||||||
|  |  | ||||||
|  | It translates gRPC into RESTful JSON APIs. | ||||||
|  | */ | ||||||
|  | package comments | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"io" | ||||||
|  | 	"net/http" | ||||||
|  |  | ||||||
|  | 	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime" | ||||||
|  | 	"github.com/grpc-ecosystem/grpc-gateway/v2/utilities" | ||||||
|  | 	"google.golang.org/grpc" | ||||||
|  | 	"google.golang.org/grpc/codes" | ||||||
|  | 	"google.golang.org/grpc/grpclog" | ||||||
|  | 	"google.golang.org/grpc/metadata" | ||||||
|  | 	"google.golang.org/grpc/status" | ||||||
|  | 	"google.golang.org/protobuf/proto" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Suppress "imported and not used" errors | ||||||
|  | var _ codes.Code | ||||||
|  | var _ io.Reader | ||||||
|  | var _ status.Status | ||||||
|  | var _ = runtime.String | ||||||
|  | var _ = utilities.NewDoubleArray | ||||||
|  | var _ = metadata.Join | ||||||
|  |  | ||||||
|  | func request_Comments_Add_0(ctx context.Context, marshaler runtime.Marshaler, client CommentsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq CreateCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := client.Add(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func local_request_Comments_Add_0(ctx context.Context, marshaler runtime.Marshaler, server CommentsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq CreateCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := server.Add(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func request_Comments_GetById_0(ctx context.Context, marshaler runtime.Marshaler, client CommentsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq GetCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := client.GetById(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func local_request_Comments_GetById_0(ctx context.Context, marshaler runtime.Marshaler, server CommentsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq GetCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := server.GetById(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func request_Comments_Edit_0(ctx context.Context, marshaler runtime.Marshaler, client CommentsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq UpdateCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := client.Edit(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func local_request_Comments_Edit_0(ctx context.Context, marshaler runtime.Marshaler, server CommentsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq UpdateCommentRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := server.Edit(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func request_Comments_ListBySku_0(ctx context.Context, marshaler runtime.Marshaler, client CommentsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ListBySkuRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := client.ListBySku(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func local_request_Comments_ListBySku_0(ctx context.Context, marshaler runtime.Marshaler, server CommentsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ListBySkuRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := server.ListBySku(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func request_Comments_ListByUser_0(ctx context.Context, marshaler runtime.Marshaler, client CommentsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ListByUserRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := client.ListByUser(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func local_request_Comments_ListByUser_0(ctx context.Context, marshaler runtime.Marshaler, server CommentsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ListByUserRequest | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  |  | ||||||
|  | 	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	msg, err := server.ListByUser(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RegisterCommentsHandlerServer registers the http handlers for service Comments to "mux". | ||||||
|  | // UnaryRPC     :call CommentsServer directly. | ||||||
|  | // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. | ||||||
|  | // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterCommentsHandlerFromEndpoint instead. | ||||||
|  | func RegisterCommentsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CommentsServer) error { | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Comments/Add", runtime.WithHTTPPathPattern("/comment/add")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Comments_Add_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_Add_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_GetById_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Comments/GetById", runtime.WithHTTPPathPattern("/comment/get-by-id")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Comments_GetById_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_GetById_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_Edit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Comments/Edit", runtime.WithHTTPPathPattern("/comment/edit")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Comments_Edit_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_Edit_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_ListBySku_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Comments/ListBySku", runtime.WithHTTPPathPattern("/comment/list-by-sku")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Comments_ListBySku_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_ListBySku_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_ListByUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Comments/ListByUser", runtime.WithHTTPPathPattern("/comment/list-by-user")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Comments_ListByUser_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_ListByUser_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RegisterCommentsHandlerFromEndpoint is same as RegisterCommentsHandler but | ||||||
|  | // automatically dials to "endpoint" and closes the connection when "ctx" gets done. | ||||||
|  | func RegisterCommentsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | ||||||
|  | 	conn, err := grpc.DialContext(ctx, endpoint, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	defer func() { | ||||||
|  | 		if err != nil { | ||||||
|  | 			if cerr := conn.Close(); cerr != nil { | ||||||
|  | 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||||
|  | 			} | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		go func() { | ||||||
|  | 			<-ctx.Done() | ||||||
|  | 			if cerr := conn.Close(); cerr != nil { | ||||||
|  | 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  | 	}() | ||||||
|  |  | ||||||
|  | 	return RegisterCommentsHandler(ctx, mux, conn) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RegisterCommentsHandler registers the http handlers for service Comments to "mux". | ||||||
|  | // The handlers forward requests to the grpc endpoint over "conn". | ||||||
|  | func RegisterCommentsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | ||||||
|  | 	return RegisterCommentsHandlerClient(ctx, mux, NewCommentsClient(conn)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RegisterCommentsHandlerClient registers the http handlers for service Comments | ||||||
|  | // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CommentsClient". | ||||||
|  | // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CommentsClient" | ||||||
|  | // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in | ||||||
|  | // "CommentsClient" to call the correct interceptors. | ||||||
|  | func RegisterCommentsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CommentsClient) error { | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Comments/Add", runtime.WithHTTPPathPattern("/comment/add")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Comments_Add_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_Add_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_GetById_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Comments/GetById", runtime.WithHTTPPathPattern("/comment/get-by-id")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Comments_GetById_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_GetById_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_Edit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Comments/Edit", runtime.WithHTTPPathPattern("/comment/edit")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Comments_Edit_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_Edit_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_ListBySku_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Comments/ListBySku", runtime.WithHTTPPathPattern("/comment/list-by-sku")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Comments_ListBySku_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_ListBySku_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	mux.Handle("POST", pattern_Comments_ListByUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Comments/ListByUser", runtime.WithHTTPPathPattern("/comment/list-by-user")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Comments_ListByUser_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		forward_Comments_ListByUser_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  |  | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	pattern_Comments_Add_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"comment", "add"}, "")) | ||||||
|  |  | ||||||
|  | 	pattern_Comments_GetById_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"comment", "get-by-id"}, "")) | ||||||
|  |  | ||||||
|  | 	pattern_Comments_Edit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"comment", "edit"}, "")) | ||||||
|  |  | ||||||
|  | 	pattern_Comments_ListBySku_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"comment", "list-by-sku"}, "")) | ||||||
|  |  | ||||||
|  | 	pattern_Comments_ListByUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"comment", "list-by-user"}, "")) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	forward_Comments_Add_0 = runtime.ForwardResponseMessage | ||||||
|  |  | ||||||
|  | 	forward_Comments_GetById_0 = runtime.ForwardResponseMessage | ||||||
|  |  | ||||||
|  | 	forward_Comments_Edit_0 = runtime.ForwardResponseMessage | ||||||
|  |  | ||||||
|  | 	forward_Comments_ListBySku_0 = runtime.ForwardResponseMessage | ||||||
|  |  | ||||||
|  | 	forward_Comments_ListByUser_0 = runtime.ForwardResponseMessage | ||||||
|  | ) | ||||||
							
								
								
									
										1452
									
								
								pkg/api/comments/v1/comments.pb.validate.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1452
									
								
								pkg/api/comments/v1/comments.pb.validate.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										249
									
								
								pkg/api/comments/v1/comments_grpc.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								pkg/api/comments/v1/comments_grpc.pb.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,249 @@ | |||||||
|  | // Code generated by protoc-gen-go-grpc. DO NOT EDIT. | ||||||
|  | // versions: | ||||||
|  | // - protoc-gen-go-grpc v1.2.0 | ||||||
|  | // - protoc             v6.30.0 | ||||||
|  | // source: comments/v1/comments.proto | ||||||
|  |  | ||||||
|  | package comments | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	context "context" | ||||||
|  | 	grpc "google.golang.org/grpc" | ||||||
|  | 	codes "google.golang.org/grpc/codes" | ||||||
|  | 	status "google.golang.org/grpc/status" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // This is a compile-time assertion to ensure that this generated file | ||||||
|  | // is compatible with the grpc package it is being compiled against. | ||||||
|  | // Requires gRPC-Go v1.32.0 or later. | ||||||
|  | const _ = grpc.SupportPackageIsVersion7 | ||||||
|  |  | ||||||
|  | // CommentsClient is the client API for Comments service. | ||||||
|  | // | ||||||
|  | // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. | ||||||
|  | type CommentsClient interface { | ||||||
|  | 	Add(ctx context.Context, in *CreateCommentRequest, opts ...grpc.CallOption) (*CreateCommentResponse, error) | ||||||
|  | 	GetById(ctx context.Context, in *GetCommentRequest, opts ...grpc.CallOption) (*GetCommentResponse, error) | ||||||
|  | 	Edit(ctx context.Context, in *UpdateCommentRequest, opts ...grpc.CallOption) (*UpdateCommentResponse, error) | ||||||
|  | 	ListBySku(ctx context.Context, in *ListBySkuRequest, opts ...grpc.CallOption) (*ListBySkuResponse, error) | ||||||
|  | 	ListByUser(ctx context.Context, in *ListByUserRequest, opts ...grpc.CallOption) (*ListByUserResponse, error) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type commentsClient struct { | ||||||
|  | 	cc grpc.ClientConnInterface | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewCommentsClient(cc grpc.ClientConnInterface) CommentsClient { | ||||||
|  | 	return &commentsClient{cc} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *commentsClient) Add(ctx context.Context, in *CreateCommentRequest, opts ...grpc.CallOption) (*CreateCommentResponse, error) { | ||||||
|  | 	out := new(CreateCommentResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/Comments/Add", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *commentsClient) GetById(ctx context.Context, in *GetCommentRequest, opts ...grpc.CallOption) (*GetCommentResponse, error) { | ||||||
|  | 	out := new(GetCommentResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/Comments/GetById", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *commentsClient) Edit(ctx context.Context, in *UpdateCommentRequest, opts ...grpc.CallOption) (*UpdateCommentResponse, error) { | ||||||
|  | 	out := new(UpdateCommentResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/Comments/Edit", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *commentsClient) ListBySku(ctx context.Context, in *ListBySkuRequest, opts ...grpc.CallOption) (*ListBySkuResponse, error) { | ||||||
|  | 	out := new(ListBySkuResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/Comments/ListBySku", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *commentsClient) ListByUser(ctx context.Context, in *ListByUserRequest, opts ...grpc.CallOption) (*ListByUserResponse, error) { | ||||||
|  | 	out := new(ListByUserResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/Comments/ListByUser", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // CommentsServer is the server API for Comments service. | ||||||
|  | // All implementations must embed UnimplementedCommentsServer | ||||||
|  | // for forward compatibility | ||||||
|  | type CommentsServer interface { | ||||||
|  | 	Add(context.Context, *CreateCommentRequest) (*CreateCommentResponse, error) | ||||||
|  | 	GetById(context.Context, *GetCommentRequest) (*GetCommentResponse, error) | ||||||
|  | 	Edit(context.Context, *UpdateCommentRequest) (*UpdateCommentResponse, error) | ||||||
|  | 	ListBySku(context.Context, *ListBySkuRequest) (*ListBySkuResponse, error) | ||||||
|  | 	ListByUser(context.Context, *ListByUserRequest) (*ListByUserResponse, error) | ||||||
|  | 	mustEmbedUnimplementedCommentsServer() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // UnimplementedCommentsServer must be embedded to have forward compatible implementations. | ||||||
|  | type UnimplementedCommentsServer struct { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (UnimplementedCommentsServer) Add(context.Context, *CreateCommentRequest) (*CreateCommentResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method Add not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedCommentsServer) GetById(context.Context, *GetCommentRequest) (*GetCommentResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method GetById not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedCommentsServer) Edit(context.Context, *UpdateCommentRequest) (*UpdateCommentResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method Edit not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedCommentsServer) ListBySku(context.Context, *ListBySkuRequest) (*ListBySkuResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method ListBySku not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedCommentsServer) ListByUser(context.Context, *ListByUserRequest) (*ListByUserResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method ListByUser not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedCommentsServer) mustEmbedUnimplementedCommentsServer() {} | ||||||
|  |  | ||||||
|  | // UnsafeCommentsServer may be embedded to opt out of forward compatibility for this service. | ||||||
|  | // Use of this interface is not recommended, as added methods to CommentsServer will | ||||||
|  | // result in compilation errors. | ||||||
|  | type UnsafeCommentsServer interface { | ||||||
|  | 	mustEmbedUnimplementedCommentsServer() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func RegisterCommentsServer(s grpc.ServiceRegistrar, srv CommentsServer) { | ||||||
|  | 	s.RegisterService(&Comments_ServiceDesc, srv) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func _Comments_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(CreateCommentRequest) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(CommentsServer).Add(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/Comments/Add", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(CommentsServer).Add(ctx, req.(*CreateCommentRequest)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func _Comments_GetById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(GetCommentRequest) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(CommentsServer).GetById(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/Comments/GetById", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(CommentsServer).GetById(ctx, req.(*GetCommentRequest)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func _Comments_Edit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(UpdateCommentRequest) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(CommentsServer).Edit(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/Comments/Edit", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(CommentsServer).Edit(ctx, req.(*UpdateCommentRequest)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func _Comments_ListBySku_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(ListBySkuRequest) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(CommentsServer).ListBySku(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/Comments/ListBySku", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(CommentsServer).ListBySku(ctx, req.(*ListBySkuRequest)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func _Comments_ListByUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(ListByUserRequest) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(CommentsServer).ListByUser(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/Comments/ListByUser", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(CommentsServer).ListByUser(ctx, req.(*ListByUserRequest)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Comments_ServiceDesc is the grpc.ServiceDesc for Comments service. | ||||||
|  | // It's only intended for direct use with grpc.RegisterService, | ||||||
|  | // and not to be introspected or modified (even as a copy) | ||||||
|  | var Comments_ServiceDesc = grpc.ServiceDesc{ | ||||||
|  | 	ServiceName: "Comments", | ||||||
|  | 	HandlerType: (*CommentsServer)(nil), | ||||||
|  | 	Methods: []grpc.MethodDesc{ | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "Add", | ||||||
|  | 			Handler:    _Comments_Add_Handler, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "GetById", | ||||||
|  | 			Handler:    _Comments_GetById_Handler, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "Edit", | ||||||
|  | 			Handler:    _Comments_Edit_Handler, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "ListBySku", | ||||||
|  | 			Handler:    _Comments_ListBySku_Handler, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "ListByUser", | ||||||
|  | 			Handler:    _Comments_ListByUser_Handler, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	Streams:  []grpc.StreamDesc{}, | ||||||
|  | 	Metadata: "comments/v1/comments.proto", | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 3ybactuk
					3ybactuk