diff --git a/docs/everyshilling_openapi.yaml b/docs/everyshilling_openapi.yaml index 7293f43..ce56d92 100644 --- a/docs/everyshilling_openapi.yaml +++ b/docs/everyshilling_openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.0.3 info: - title: Every shillings OpenAPI File Description + title: Every shillings Auth OpenAPI endpoint description: Every Shilling version: 2022-04-01 termsOfService: https://everyshilling.ke/terms @@ -31,8 +31,6 @@ paths: in: path required: true description: user id - schema: - type: string responses: '200': description: user object response @@ -309,8 +307,7 @@ paths: description: "Password reset request UUID" required: true in: path - schema: - type: string + responses: "200": description: OTP generated and sent successfully @@ -457,11 +454,11 @@ paths: $ref: "#/components/schemas/LogoutRequest" responses: "200": - description: OTP generated and sent successfully + description: User logged out successfully content: application/json: schema: - $ref: "#/components/schemas/PhoneVerificationResponse" + $ref: "#/components/schemas/LogoutResponseData" "401": description: "Unauthorized: Invalid or expired token" "500": @@ -494,8 +491,6 @@ paths: post: summary: Buy Currencies description: Endpoint to buy currency - operationId : buycurrency - tags: [BuyCurrency] requestBody: required: true content: @@ -515,36 +510,31 @@ paths: /top-up-account: - post: - summary: Top up Account - description: Endpoint to top up the account - operationId: TopUp - tags : [TopUP] - - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TopUpRequest" - responses: - '200': - description: Successful operation + post: + summary: Top up Account + description: Endpoint to top up the account + requestBody: + required: true content: application/json: schema: - $ref: "#/components/schemas/TopUpRequestData" + $ref: "#/components/schemas/TopUpRequest" + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/TopUpRequestData" - '400': - description: Invalid request payload + '400': + description: Invalid request payload /marketplace-offers: get: summary: Marketplace Offers - operationId: Offers description: Endpoint to get marketplace offers - tags: [Offers] responses: '200': description: Successful operation @@ -559,8 +549,6 @@ paths: get: summary: Account Overview description: Endpoint to get account overview - operationId : Accountoverview - tags : [AccountOverview] responses: '200': description: Successful operation @@ -569,14 +557,13 @@ paths: schema: $ref: "#/components/schemas/AccountOverviewResponse" '400': - description: Invalid request payload + description: Invalid request payload tags: - name: Register description: Registration description - name: Users description: Users path - - name: Login description: Login description @@ -584,16 +571,6 @@ tags: description: Help the user gain access and reset password - name: Phone Verification description: Make sure the user's phone is valid inorder to activate the account - - name: Offers - description: Show the available offers - - - name: BuyCurrency - description: Buy currency description - - - name: TopUp - description: Top up Account - - name : AccountOverview - description: The account overview components: securitySchemes: @@ -933,42 +910,41 @@ components: - refresh_token - bearer_token ResendNewOTPResponse: - type: object - properties: - message: - type: string - description: "Message" - error: - type: string - description: "Error" - status_code: - type: number - description: "Status code" - data: - $ref: "#/components/schemas/OTPResponseObj" + type: object + properties: + message: + type: string + description: "Message" + error: + type: string + description: "Error" + status_code: + type: number + description: "Status code" + data: + $ref: "#/components/schemas/OTPResponseObj" PhoneVerificationResponse: - type: object - properties: - message: - type: string - description: "Message" - error: - type: string - description: "Error" - status_code: - type: number - description: "Status code" - data: - type: object - properties: - bearer_token: - type: string - refresh_token: - type: string - required: - - bearer_token - - refresh_token + type: object + properties: + message: + type: string + description: "Message" + error: + type: string + description: "Error" + status_code: + type: number + description: "Status code" + data: + type: object + properties: + bearer_token: + type: string + required: true + refresh_token: + type: string + required: true BuyRequest: type: object @@ -1000,12 +976,12 @@ components: data: $ref: "#/components/schemas/BuyRequestObj" BuyRequestObj: - type: object - properties: - buyId: - type: integer - description: "The unique identifier of the buy request" - example: 1234 + type: object + properties: + buyId: + type: integer + description: "The unique identifier of the buy request" + example: 1234 TopUpRequest: type: object properties: @@ -1016,25 +992,25 @@ components: type: number TopUpRequestData: - type: object - properties: - message: - type: string - example: "Your account has been topped up" - error: - type: string - code: - type: number - example: 200 - data: - $ref: "#/components/schemas/TopUpResponseObj" + type: object + properties: + message: + type: string + example: "Your account has been topped up" + error: + type: string + code: + type: number + example: 200 + data: + $ref: "#/components/schemas/TopUpResponseObj" TopUpResponseObj: - type: object - properties: - topUpId: - type: integer - description: "The unique identifier of the top-up request" - example: 1234 + type: object + properties: + topUpId: + type: integer + description: "The unique identifier of the top-up request" + example: 1234 MarketplaceOffersResponse: type: object @@ -1049,41 +1025,41 @@ components: type: number description: Conversion rate from US Dollar to Kenyan Shilling data: - $ref: "#/components/schemas/MarketplaceOffersResponseObj" + $ref: "#/components/schemas/MarketplaceOffersResponseObj" MarketplaceOffersResponseObj: - type: array - items: + type: array + items: + type: object + properties: + currency: + type: string + description: Currency code + example: "USD" + rate: + type: number + description: Exchange rate for the currency + example: 110.0 + + AccountOverviewResponse: type: object properties: - currency: - type: string - description: Currency code - example: "USD" - rate: + balance: type: number - description: Exchange rate for the currency - example: 110.0 - - AccountOverviewResponse: - type: object - properties: - balance: - type: number - description: Current account balance - paymentDetails: - type: object - properties: - amountPaid: - type: number - description: Amount paid in the transaction - remainingBalance: - type: number - description: Remaining balance after the transaction - transactionSummary: - type: object - description: Summary or details of the payment made - data: - $ref: "#/components/schemas/AccountOverviewResponseObj" + description: Current account balance + paymentDetails: + type: object + properties: + amountPaid: + type: number + description: Amount paid in the transaction + remainingBalance: + type: number + description: Remaining balance after the transaction + transactionSummary: + type: object + description: Summary or details of the payment made + data: + $ref: "#/components/schemas/AccountOverviewResponseObj" AccountOverviewResponseObj: type: object properties: diff --git a/sdk/go-proto-gen b/sdk/go-proto-gen deleted file mode 160000 index b5df800..0000000 --- a/sdk/go-proto-gen +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b5df8001ee94280b9f2b9311f69935c1f3441586 diff --git a/services/app-auth/go.mod b/services/app-auth/go.mod index e9438e8..de51f5f 100644 --- a/services/app-auth/go.mod +++ b/services/app-auth/go.mod @@ -3,10 +3,11 @@ module github.com/AppsLab-KE/backend-everyshilling/services/app-authentication go 1.19 require ( - github.com/AppsLab-KE/be-go-gen-grpc v0.0.13 + github.com/AppsLab-KE/be-go-gen-grpc v0.0.16 github.com/deepmap/oapi-codegen v1.12.4 github.com/gin-gonic/gin v1.9.0 github.com/golang-jwt/jwt/v5 v5.0.0-rc.2 + github.com/golang/protobuf v1.5.2 github.com/google/uuid v1.3.0 github.com/hashicorp/consul/api v1.20.0 github.com/redis/go-redis/v9 v9.0.3 @@ -29,7 +30,6 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.11.2 // indirect github.com/goccy/go-json v0.10.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect github.com/hashicorp/go-hclog v0.12.0 // indirect github.com/hashicorp/go-immutable-radix v1.0.0 // indirect diff --git a/services/app-auth/go.sum b/services/app-auth/go.sum index cb728fa..2b6ed27 100644 --- a/services/app-auth/go.sum +++ b/services/app-auth/go.sum @@ -1,5 +1,6 @@ -github.com/AppsLab-KE/be-go-gen-grpc v0.0.13 h1:x3nsaE7AAiLI1xSKBtHkgzpjWY9sxSeVCD+0Vk9jW9g= -github.com/AppsLab-KE/be-go-gen-grpc v0.0.13/go.mod h1:F0zAKKv7O9FfplN/28CsWBRJu2ZArWNgIZbix6isDKY= + +github.com/AppsLab-KE/be-go-gen-grpc v0.0.16 h1:qu0xjUhyBurj1uQvrGJxrPUEZy4XgMm878wh44rKre8= +github.com/AppsLab-KE/be-go-gen-grpc v0.0.16/go.mod h1:F0zAKKv7O9FfplN/28CsWBRJu2ZArWNgIZbix6isDKY= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= diff --git a/services/app-auth/internal/core/adapters/exchange.go b/services/app-auth/internal/core/adapters/exchange.go new file mode 100644 index 0000000..a7a585e --- /dev/null +++ b/services/app-auth/internal/core/adapters/exchange.go @@ -0,0 +1,85 @@ +package adapters + +import ( + "context" + "github.com/AppsLab-KE/be-go-gen-grpc/exchange" + "github.com/golang/protobuf/ptypes/empty" + "google.golang.org/grpc" +) + +type ExchangeStorage interface { + // RATES + CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) + ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) + UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) + DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) + // ACCOUNT + CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) + DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) + UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) + SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) + // TRANSACTION + CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) + DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) + GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) + // TRADING + CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) + DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) + GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) +} + +type ExchangeRepository interface { + + // RATES + CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) + ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) + UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) + DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) + // ACCOUNT + CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) + DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) + UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) + SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) + // TRANSACTION + CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) + DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) + GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) + // TRADING + CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) + DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) + GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) +} + +type ExchangeService interface { + + // RATES + CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) + ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) + UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) + DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) + // ACCOUNT + CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) + DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) + UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) + SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) + // TRANSACTION + CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) + DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) + GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) + // TRADING + CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) + DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) + GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) +} diff --git a/services/app-auth/internal/core/adapters/usecase.go b/services/app-auth/internal/core/adapters/usecase.go index 3d59323..191ce32 100644 --- a/services/app-auth/internal/core/adapters/usecase.go +++ b/services/app-auth/internal/core/adapters/usecase.go @@ -3,6 +3,9 @@ package adapters import ( "context" "github.com/AppsLab-KE/backend-everyshilling/services/app-authentication/internal/dto" + "github.com/AppsLab-KE/be-go-gen-grpc/exchange" + "github.com/golang/protobuf/ptypes/empty" + "google.golang.org/grpc" ) type AuthUseCase interface { @@ -26,3 +29,28 @@ type AuthUseCase interface { VerifyAccessToken(token string) (string, error) } + +type ExchangeStorageUsecase interface { + // RATES + CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) + ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) + UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) + DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) + // ACCOUNT + CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) + DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) + UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) + SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) + // TRANSACTION + CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) + DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) + GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) + // TRADING + CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) + DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) + GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) + GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) +} diff --git a/services/app-auth/internal/core/repository/exchange.go b/services/app-auth/internal/core/repository/exchange.go new file mode 100644 index 0000000..bd32ab2 --- /dev/null +++ b/services/app-auth/internal/core/repository/exchange.go @@ -0,0 +1,164 @@ +package repository + +import ( + "context" + "github.com/AppsLab-KE/backend-everyshilling/services/app-authentication/internal/core/adapters" + "github.com/AppsLab-KE/be-go-gen-grpc/exchange" + "github.com/golang/protobuf/ptypes/empty" + "google.golang.org/grpc" +) + +type ExchangeRepositoryImplementation struct { + exchangeStorage adapters.ExchangeStorage +} + +func (e ExchangeRepositoryImplementation) CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) { + // Call the corresponding method in exchangeStorage to create a conversion rate + res, err := e.exchangeStorage.CreateConversionRate(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) { + res, err := e.exchangeStorage.ReadConversionRate(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) { + res, err := e.exchangeStorage.UpdateConversionRate(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) { + res, err := e.exchangeStorage.DeleteConversionRate(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) { + res, err := e.exchangeStorage.CreateAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) { + res, err := e.exchangeStorage.DeleteAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) { + res, err := e.exchangeStorage.UpdateAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) { + res, err := e.exchangeStorage.SearchAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) { + res, err := e.exchangeStorage.CreateTransaction(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + res, err := e.exchangeStorage.DeleteTransaction(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + res, err := e.exchangeStorage.UpdateTransaction(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) { + res, err := e.exchangeStorage.GetTransaction(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) { + res, err := e.exchangeStorage.GetTransactionByAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) { + res, err := e.exchangeStorage.CreateTrade(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + res, err := e.exchangeStorage.DeleteTrade(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + res, err := e.exchangeStorage.UpdateTrade(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) { + res, err := e.exchangeStorage.GetTrade(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func (e ExchangeRepositoryImplementation) GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) { + res, err := e.exchangeStorage.GetTradeByAccount(ctx, in) + if err != nil { + return nil, err + } + return res, nil +} + +func NewExchangeRepositoryImplementation(exchangeStorage adapters.ExchangeStorage) adapters.ExchangeStorage { + return &ExchangeRepositoryImplementation{ + exchangeStorage: exchangeStorage, + } +} diff --git a/services/app-auth/internal/core/storage/exchange.go b/services/app-auth/internal/core/storage/exchange.go new file mode 100644 index 0000000..b62c334 --- /dev/null +++ b/services/app-auth/internal/core/storage/exchange.go @@ -0,0 +1,163 @@ +package storage + +import ( + "context" + "github.com/AppsLab-KE/backend-everyshilling/services/app-authentication/internal/core/adapters" + "github.com/AppsLab-KE/be-go-gen-grpc/exchange" + "github.com/golang/protobuf/ptypes/empty" + "google.golang.org/grpc" +) + +type exchangeStorageImpl struct { + exchangeClient exchange.ExchangeServiceClient +} + +func (e exchangeStorageImpl) CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) { + response, err := e.exchangeClient.CreateConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) { + response, err := e.exchangeClient.ReadConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) { + response, err := e.exchangeClient.UpdateConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) { + response, err := e.exchangeClient.DeleteConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) { + response, err := e.exchangeClient.CreateAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) { + response, err := e.exchangeClient.DeleteAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) { + response, err := e.exchangeClient.UpdateAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) { + response, err := e.exchangeClient.SearchAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) { + response, err := e.exchangeClient.CreateTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeClient.DeleteTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeClient.UpdateTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) { + response, err := e.exchangeClient.GetTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) { + response, err := e.exchangeClient.GetTransactionByAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) { + response, err := e.exchangeClient.CreateTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeClient.DeleteTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeClient.UpdateTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) { + response, err := e.exchangeClient.GetTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeStorageImpl) GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) { + response, err := e.exchangeClient.GetTradeByAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func NewExchangeStorageImpl(exchangeClient exchange.ExchangeServiceClient) adapters.ExchangeStorage { + return &exchangeStorageImpl{ + exchangeClient: exchangeClient, + } +} diff --git a/services/app-auth/internal/core/usecase/exchange.go b/services/app-auth/internal/core/usecase/exchange.go new file mode 100644 index 0000000..cc15054 --- /dev/null +++ b/services/app-auth/internal/core/usecase/exchange.go @@ -0,0 +1,167 @@ +package usecase + +import ( + "context" + "github.com/AppsLab-KE/backend-everyshilling/services/app-authentication/internal/core/adapters" + "github.com/AppsLab-KE/be-go-gen-grpc/exchange" + "github.com/golang/protobuf/ptypes/empty" + "google.golang.org/grpc" +) + +type exchangeUseCaseImpl struct { + exchangeService adapters.ExchangeService +} + +func (e exchangeUseCaseImpl) CreateConversionRate(ctx context.Context, in *exchange.CreateConversionRateRequest, opts ...grpc.CallOption) (*exchange.CreateConversionRateResponse, error) { + // Call the exchange service method to create the conversion rate + response, err := e.exchangeService.CreateConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) ReadConversionRate(ctx context.Context, in *exchange.ReadConversionRateRequest, opts ...grpc.CallOption) (*exchange.ReadConversionRateResponse, error) { + // Call the exchange service method to read the conversion rate + response, err := e.exchangeService.ReadConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil + +} + +func (e exchangeUseCaseImpl) UpdateConversionRate(ctx context.Context, in *exchange.UpdateConversionRateRequest, opts ...grpc.CallOption) (*exchange.UpdateConversionRateResponse, error) { + response, err := e.exchangeService.UpdateConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) DeleteConversionRate(ctx context.Context, in *exchange.DeleteConversionRateRequest, opts ...grpc.CallOption) (*exchange.DeleteConversionRateResponse, error) { + response, err := e.exchangeService.DeleteConversionRate(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil + +} + +func (e exchangeUseCaseImpl) CreateAccount(ctx context.Context, in *exchange.CreateAccountRequest, opts ...grpc.CallOption) (*exchange.CreateAccountResponse, error) { + response, err := e.exchangeService.CreateAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) DeleteAccount(ctx context.Context, in *exchange.DeleteAccountRequest, opts ...grpc.CallOption) (*exchange.DeleteAccountResponse, error) { + response, err := e.exchangeService.DeleteAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) UpdateAccount(ctx context.Context, in *exchange.UpdateAccountRequest, opts ...grpc.CallOption) (*exchange.UpdateAccountResponse, error) { + response, err := e.exchangeService.UpdateAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) SearchAccount(ctx context.Context, in *exchange.SearchAccountRequest, opts ...grpc.CallOption) (*exchange.SearchAccountResponse, error) { + response, err := e.exchangeService.SearchAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) CreateTransaction(ctx context.Context, in *exchange.CreateTransactionRequest, opts ...grpc.CallOption) (*exchange.CreateTransactionResponse, error) { + response, err := e.exchangeService.CreateTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) DeleteTransaction(ctx context.Context, in *exchange.DeleteTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeService.DeleteTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) UpdateTransaction(ctx context.Context, in *exchange.UpdateTransactionRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeService.UpdateTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) GetTransaction(ctx context.Context, in *exchange.GetTransactionRequest, opts ...grpc.CallOption) (*exchange.Transaction, error) { + response, err := e.exchangeService.GetTransaction(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) GetTransactionByAccount(ctx context.Context, in *exchange.GetTransactionByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTransactionByAccountResponse, error) { + response, err := e.exchangeService.GetTransactionByAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) CreateTrade(ctx context.Context, in *exchange.CreateTradeRequest, opts ...grpc.CallOption) (*exchange.CreateTradeResponse, error) { + response, err := e.exchangeService.CreateTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) DeleteTrade(ctx context.Context, in *exchange.DeleteTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeService.DeleteTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) UpdateTrade(ctx context.Context, in *exchange.UpdateTradeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + response, err := e.exchangeService.UpdateTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) GetTrade(ctx context.Context, in *exchange.GetTradeRequest, opts ...grpc.CallOption) (*exchange.Trade, error) { + response, err := e.exchangeService.GetTrade(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func (e exchangeUseCaseImpl) GetTradeByAccount(ctx context.Context, in *exchange.GetTradeByAccountRequest, opts ...grpc.CallOption) (*exchange.GetTradeByAccountResponse, error) { + response, err := e.exchangeService.GetTradeByAccount(ctx, in, opts...) + if err != nil { + return nil, err + } + return response, nil +} + +func NewExchangeUseCase(exchangeService adapters.ExchangeService) adapters.ExchangeService { + return &exchangeUseCaseImpl{ + exchangeService: exchangeService, + } +} diff --git a/services/app-auth/internal/routes/server/server.go b/services/app-auth/internal/routes/server/server.go index 8353f84..3cd4b1c 100644 --- a/services/app-auth/internal/routes/server/server.go +++ b/services/app-auth/internal/routes/server/server.go @@ -11,10 +11,11 @@ import ( const BaseUrl = "/api" type Config struct { - AuthUsecase adapters.AuthUseCase + AuthUsecase adapters.AuthUseCase + ExchangeUsecase adapters.ExchangeStorageUsecase } -func NewServer(authUseCase adapters.AuthUseCase, cfg config.Config) *gin.Engine { +func NewServer(authUseCase adapters.AuthUseCase, exchangeUseCase adapters.ExchangeStorageUsecase, cfg config.Config) *gin.Engine { r := gin.Default() middlewareManager := middleware.NewManager(cfg, authUseCase) @@ -33,7 +34,9 @@ func NewServer(authUseCase adapters.AuthUseCase, cfg config.Config) *gin.Engine // Serve swagger spec // Map handlers + //h := handlers.NewHandler(authUseCase,exchangeUseCase) h := handlers.NewHandler(authUseCase) + handlers.RegisterHandlersWithOptions(r, h, options) return r diff --git a/services/app-auth/main.go b/services/app-auth/main.go index 7ce1ea8..267747b 100644 --- a/services/app-auth/main.go +++ b/services/app-auth/main.go @@ -58,6 +58,7 @@ func main() { // Initialise usecases authUC := usecase.NewAuthUsecase(authService, nil) + //exchangeUseCase := usecase.NewExchangeUseCase(exchangeService,nil) // server config handler := server.NewServer(authUC, *cfg) diff --git a/services/app-exchange/go.mod b/services/app-exchange/go.mod index cc15b86..37a96b9 100644 --- a/services/app-exchange/go.mod +++ b/services/app-exchange/go.mod @@ -1,6 +1,8 @@ module github.com/AppsLab-KE/backend-everyshilling/services/app-exchange -go 1.20 + +go 1.19 + require ( github.com/AppsLab-KE/be-go-gen-grpc v0.0.14 diff --git a/services/app-exchange/internal/dto/http.gen.go b/services/app-exchange/internal/dto/http.gen.go deleted file mode 100644 index 76d3a17..0000000 --- a/services/app-exchange/internal/dto/http.gen.go +++ /dev/null @@ -1 +0,0 @@ -package dto