This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git
The following commit(s) were added to refs/heads/main by this push:
new 38b2767c feat(#862):online_boutique_demo add one-click operations
(#863)
38b2767c is described below
commit 38b2767cfa670cd74fbdfd538d9320216f086a37
Author: KamTo Hung <[email protected]>
AuthorDate: Sun Jul 27 13:11:11 2025 +0800
feat(#862):online_boutique_demo add one-click operations (#863)
* feat(#862):online_boutique_demo add one-click operations
* fix: simplify Makefile commands for service operations
* fix: simplify Makefile commands for service operations
* fix: translate Makefile comments to English for better accessibility
* docs: add script section to README for better clarity on available
services
---
online_boutique/Makefile | 181 +++++++++++++++++++++
online_boutique/README.md | 144 +++++++++++++++-
.../src/{adservive => adservice}/Dockerfile | 0
.../src/{adservive => adservice}/Makefile | 0
.../src/{adservive => adservice}/cli/main.go | 0
.../src/{adservive => adservice}/go.mod | 0
.../src/{adservive => adservice}/go.sum | 0
.../{adservive => adservice}/handler/adservice.go | 0
.../src/{adservive => adservice}/main.go | 0
.../{adservive => adservice}/proto/adservice.pb.go | 0
.../{adservive => adservice}/proto/adservice.proto | 0
.../proto/adservice.triple.go | 0
.../src/{frontend => frontendservice}/Dockerfile | 0
.../src/{frontend => frontendservice}/Makefile | 0
.../{frontend => frontendservice}/config/config.go | 0
.../deployment_details.go | 0
.../src/{frontend => frontendservice}/go.mod | 0
.../src/{frontend => frontendservice}/go.sum | 0
.../src/{frontend => frontendservice}/handlers.go | 0
.../src/{frontend => frontendservice}/main.go | 0
.../{frontend => frontendservice}/middleware.go | 0
.../{frontend => frontendservice}/money/money.go | 0
.../money/money_test.go | 0
.../proto/hipstershop.pb.go | 0
.../proto/hipstershop.proto | 0
.../proto/hipstershop.triple.go | 0
.../src/{frontend => frontendservice}/rpc.go | 0
.../static/favicon-cymbal.ico | Bin
.../static/favicon.ico | Bin
.../static/icons/Cymbal_NavLogo.svg | 0
.../static/icons/Hipster_Advert2.svg | 0
.../static/icons/Hipster_CartIcon.svg | 0
.../static/icons/Hipster_CheckOutIcon.svg | 0
.../static/icons/Hipster_CurrencyIcon.svg | 0
.../static/icons/Hipster_DownArrow.svg | 0
.../static/icons/Hipster_FacebookIcon.svg | 0
.../static/icons/Hipster_GooglePlayIcon.svg | 0
.../static/icons/Hipster_HelpIcon.svg | 0
.../static/icons/Hipster_HeroLogo.svg | 0
.../static/icons/Hipster_HeroLogoCyan.svg | 0
.../static/icons/Hipster_InstagramIcon.svg | 0
.../static/icons/Hipster_KitchenwareOffer.svg | 0
.../static/icons/Hipster_NavLogo.svg | 0
.../static/icons/Hipster_PinterestIcon.svg | 0
.../static/icons/Hipster_ProfileIcon.svg | 0
.../static/icons/Hipster_SearchIcon.svg | 0
.../static/icons/Hipster_TwitterIcon.svg | 0
.../static/icons/Hipster_UpDownControl.svg | 0
.../static/icons/Hipster_YoutubeIcon.svg | 0
.../static/images/Advert2BannerImage.png | Bin
.../static/images/AdvertBannerImage.png | Bin
.../static/images/HeroBannerImage.png | Bin
.../static/images/HeroBannerImage2.png | Bin
.../static/images/VRHeadsets.png | Bin
.../static/images/credits.txt | 0
.../images/folded-clothes-on-white-chair-wide.jpg | Bin
.../images/folded-clothes-on-white-chair.jpg | Bin
.../static/img/products/bamboo-glass-jar.jpg | Bin
.../static/img/products/candle-holder.jpg | Bin
.../static/img/products/hairdryer.jpg | Bin
.../static/img/products/loafers.jpg | Bin
.../static/img/products/mug.jpg | Bin
.../img/products/salt-and-pepper-shakers.jpg | Bin
.../static/img/products/sunglasses.jpg | Bin
.../static/img/products/tank-top.jpg | Bin
.../static/img/products/watch.jpg | Bin
.../static/styles/cart.css | 0
.../static/styles/order.css | 0
.../static/styles/styles.css | 0
.../templates/ad.html | 0
.../templates/cart.html | 0
.../templates/error.html | 0
.../templates/footer.html | 0
.../templates/header.html | 0
.../templates/home.html | 0
.../templates/order.html | 0
.../templates/product.html | 0
.../templates/recommendations.html | 0
78 files changed, 321 insertions(+), 4 deletions(-)
diff --git a/online_boutique/Makefile b/online_boutique/Makefile
new file mode 100644
index 00000000..8ee533f4
--- /dev/null
+++ b/online_boutique/Makefile
@@ -0,0 +1,181 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Define service list and corresponding executable names
+SERVICES := adservice cartservice checkoutservice currencyservice emailservice
frontendservice paymentservice productcatalogservice recommendationservice
shippingservice
+
+# Define mapping from service directory names to executable names
+# Define color output
+BLUE := \033[34m
+GREEN := \033[32m
+YELLOW := \033[33m
+RED := \033[31m
+NC := \033[0m # No Color
+
+# Default target
+.PHONY: help
+help:
+ @echo "$(BLUE)Online Boutique Makefile$(NC)"
+ @echo "$(GREEN)Available targets:$(NC)"
+ @echo " $(YELLOW)build-all$(NC) - Build all services"
+ @echo " $(YELLOW)start-all$(NC) - Start all services (run in
background)"
+ @echo " $(YELLOW)stop-all$(NC) - Stop all services"
+ @echo " $(YELLOW)clean-all$(NC) - Clean all build files"
+ @echo " $(YELLOW)tidy-all$(NC) - Execute go mod tidy for all
services"
+ @echo " $(YELLOW)logs$(NC) - View all service logs"
+ @echo " $(YELLOW)status$(NC) - Check all service status"
+ @echo ""
+ @echo "$(GREEN)Individual service operations:$(NC)"
+ @echo " $(YELLOW)build-<service>$(NC) - Build specified service"
+ @echo " $(YELLOW)start-<service>$(NC) - Start specified service"
+ @echo " $(YELLOW)stop-<service>$(NC) - Stop specified service"
+ @echo ""
+ @echo "$(GREEN)Available services:$(NC) $(SERVICES)"
+
+# Build all services
+.PHONY: build-all
+build-all:
+ @echo "$(BLUE)Building all services...$(NC)"
+ @for service in $(SERVICES); do \
+ echo "$(GREEN)Building $$service...$(NC)"; \
+ $(MAKE) -C src/$$service build; \
+ done
+ @echo "$(GREEN)All services built successfully!$(NC)"
+
+# Start all services
+.PHONY: start-all
+start-all: build-all setup
+ @echo "$(BLUE)Starting all services...$(NC)"
+ @for service in $(SERVICES); do \
+ echo "$(GREEN)Starting $$service...$(NC)"; \
+ (cd src/$$service; \
+ nohup ./$$service > ../../logs/$$service.log 2>&1 & echo $$! >
../../pids/$$service.pid); \
+ sleep 2; \
+ done
+ @echo "$(GREEN)All services started!$(NC)"
+
+# Stop all services
+.PHONY: stop-all
+stop-all:
+ @echo "$(BLUE)Stopping all services...$(NC)"
+ @for service in $(SERVICES); do \
+ if [ -f pids/$$service.pid ]; then \
+ echo "$(YELLOW)Stopping $$service...$(NC)"; \
+ kill -TERM $$(cat pids/$$service.pid) 2>/dev/null ||
true; \
+ rm -f pids/$$service.pid; \
+ fi; \
+ done
+ @echo "$(GREEN)All services stopped!$(NC)"
+
+# Clean all build files
+.PHONY: clean-all
+clean-all:
+ @echo "$(BLUE)Cleaning all build files...$(NC)"
+ @for service in $(SERVICES); do \
+ echo "$(YELLOW)Cleaning $$service...$(NC)"; \
+ rm -f src/$$service/$$service; \
+ done
+ @rm -rf logs pids
+ @echo "$(GREEN)Cleanup complete!$(NC)"
+
+# Execute go mod tidy for all services
+.PHONY: tidy-all
+tidy-all:
+ @echo "$(BLUE)Executing go mod tidy for all services...$(NC)"
+ @for service in $(SERVICES); do \
+ echo "$(GREEN)Tidying $$service...$(NC)"; \
+ $(MAKE) -C src/$$service tidy; \
+ done
+ @echo "$(GREEN)All services tidy complete!$(NC)"
+
+# View all service logs
+.PHONY: logs
+logs:
+ @echo "$(BLUE)Viewing all service logs...$(NC)"
+ @mkdir -p logs
+ @for service in $(SERVICES); do \
+ if [ -f logs/$$service.log ]; then \
+ echo "$(GREEN)=== $$service logs ===$(NC)"; \
+ tail -20 logs/$$service.log; \
+ echo ""; \
+ fi; \
+ done
+
+# Check all service status
+.PHONY: status
+status:
+ @echo "$(BLUE)Checking all service status...$(NC)"
+ @mkdir -p pids
+ @for service in $(SERVICES); do \
+ if [ -f pids/$$service.pid ]; then \
+ pid=$$(cat pids/$$service.pid); \
+ if ps -p $$pid > /dev/null 2>&1; then \
+ echo "$(GREEN)✓ $$service (PID: $$pid) -
Running$(NC)"; \
+ else \
+ echo "$(RED)✗ $$service - Stopped$(NC)"; \
+ rm -f pids/$$service.pid; \
+ fi; \
+ else \
+ echo "$(YELLOW)- $$service - Not started$(NC)"; \
+ fi; \
+ done
+
+# Create necessary directories
+.PHONY: setup
+setup:
+ @mkdir -p logs pids
+
+# Template for individual service operations
+define service-template
+.PHONY: build-$(1)
+build-$(1):
+ @echo "$(GREEN)Building $(1)...$(NC)"
+ @$(MAKE) -C src/$(1) build
+
+.PHONY: start-$(1)
+start-$(1): build-$(1) setup
+ @echo "$(GREEN)Starting $(1)...$(NC)"
+ @cd src/$(1) && nohup ./$(1) > ../../logs/$(1).log 2>&1 & echo $$! >
../../pids/$(1).pid
+
+.PHONY: stop-$(1)
+stop-$(1):
+ @mkdir -p pids
+ @if [ -f pids/$(1).pid ]; then \
+ echo "$(YELLOW)Stopping $(1)...$(NC)"; \
+ kill -TERM $$(cat pids/$(1).pid) 2>/dev/null || true; \
+ rm -f pids/$(1).pid; \
+ else \
+ echo "$(YELLOW)$(1) is not running$(NC)"; \
+ fi
+endef
+
+# Generate template for each service
+$(foreach service,$(SERVICES),$(eval $(call service-template,$(service))))
+
+# Environment check
+.PHONY: check-env
+check-env:
+ @echo "$(BLUE)Checking environment dependencies...$(NC)"
+ @which go > /dev/null || (echo "$(RED)Error: Go not found$(NC)" && exit
1)
+ @echo "$(GREEN)Environment check passed!$(NC)"
+
+# Initialize project
+.PHONY: init
+init: check-env setup tidy-all
+ @echo "$(GREEN)Project initialization complete!$(NC)"
+ @echo "$(BLUE)Use 'make start-all' to start all services$(NC)"
+ @echo "$(BLUE)Use 'make help' to view more commands$(NC)"
\ No newline at end of file
diff --git a/online_boutique/README.md b/online_boutique/README.md
index 722d3cba..3f846883 100644
--- a/online_boutique/README.md
+++ b/online_boutique/README.md
@@ -1,10 +1,9 @@
# Dubbo Go Demo
[](https://opensource.org/licenses/Apache-2.0)
[](https://godoc.org/github.com/go-micro/demo)
[](https://github.com/go-micro/demo/actions/workflows/ci.yml)
[](https://github.com/go-micro/dem
[...]
<p align="center">
-<img src="src/frontend/static/icons/Hipster_HeroLogoCyan.svg" width="300"
alt="Online Boutique" />
+<img src="src/frontendservice/static/icons/Hipster_HeroLogoCyan.svg"
width="300" alt="Online Boutique" />
</p>
-
**This application was forked from
[microservices-demo](https://github.com/GoogleCloudPlatform/microservices-demo),
used to demonstrate how to build micro servics with
[dubbo-go](https://github.com/apache/dubbo-go).**
**Online Boutique** is a cloud-native microservices demo application.
@@ -12,6 +11,139 @@ Online Boutique consists of a 11-tier microservices
application. The application
web-based e-commerce app where users can browse items,
add them to the cart, and purchase them.
+## 🚀 Quick Start
+
+### Prerequisites
+
+Before you begin, make sure you have the following installed:
+
+- [Go](https://golang.org/doc/install)
+- [Python 3](https://www.python.org/downloads/)
+- [pip3](https://pip.pypa.io/en/stable/installation/)
+- [ZooKeeper](https://zookeeper.apache.org/)
+
+### One-Command Setup
+
+Start all services with a single command:
+
+```bash
+make start-all
+```
+
+This command will:
+1. Build all 11 microservices
+2. Start business services in the background
+3. Wait for services to initialize
+4. Start the load generator
+
+### Access the Application
+
+Once all services are running, you can access:
+- **Web Frontend**: http://localhost:8090
+- **Service Status**: Check with `make status`
+- **Service Logs**: View with `make logs`
+
+## 📋 Makefile Commands
+
+The project includes a comprehensive Makefile for easy service management:
+
+### Basic Commands
+
+| Command | Description |
+|---------|-------------|
+| `make help` | Show all available commands |
+| `make start-all` | Build and start all services |
+| `make stop-all` | Stop all running services |
+| `make status` | Check status of all services |
+| `make logs` | View logs from all services |
+
+### Service Management
+
+| Command | Description |
+|---------|-------------|
+| `make build-all` | Build all services without starting |
+| `make clean-all` | Clean all build artifacts |
+| `make tidy-all` | Run `go mod tidy` for all services |
+
+### Individual Service Control
+
+You can control individual services using the pattern `make
<action>-<service>`:
+
+```bash
+# Build specific service
+make build-adservice
+make build-cartservice
+
+# Start specific service
+make start-adservice
+make start-cartservice
+
+# Stop specific service
+make stop-adservice
+make stop-cartservice
+```
+
+### Available Services
+
+- `adservice` - Advertisement service
+- `cartservice` - Shopping cart service
+- `checkoutservice` - Checkout processing service
+- `currencyservice` - Currency conversion service
+- `emailservice` - Email notification service
+- `frontendservice` - Web frontend service
+- `paymentservice` - Payment processing service
+- `productcatalogservice` - Product catalog service
+- `recommendationservice` - Product recommendation service
+- `shippingservice` - Shipping cost calculation service
+
+### Environment Setup
+
+Initialize your development environment:
+
+```bash
+# Check prerequisites and initialize project
+make init
+
+# Check environment dependencies
+make check-env
+```
+
+### Service Monitoring
+
+Monitor your services:
+
+```bash
+# Check which services are running
+make status
+
+# View recent logs from all services
+make logs
+
+# View logs for a specific service
+tail -f logs/frontend.log
+```
+
+### Troubleshooting
+
+If you encounter issues:
+
+1. **Check service status**: `make status`
+2. **View logs**: `make logs`
+3. **Restart services**: `make stop-all && make start-all`
+4. **Clean build**: `make clean-all && make build-all`
+
+### Development Workflow
+
+For development, you might want to:
+
+```bash
+# Start only business services for development
+make start-all
+
+# Stop all services when done
+make stop-all
+```
+
## Screenshots
| Home Page
| Checkout Screen
|
@@ -28,8 +160,8 @@ languages that talk to each other over gRPC. See the
[Development Principles](/d
microservices](./docs/img/architecture-diagram.png)](./docs/img/architecture-diagram.png)
| Service | Language |
Description
|
-| ---------------------------------------------------- | ------------- |
---------------------------------------------------------------------------------------------------------------------------------
|
-| [frontend](./src/frontend) | Go |
Exposes an HTTP server to serve the website. Does not require signup/login and
generates session IDs for all users automatically. |
+|------------------------------------------------------| ------------- |
---------------------------------------------------------------------------------------------------------------------------------
|
+| [frontendservice](src/frontendservice) | Go |
Exposes an HTTP server to serve the website. Does not require signup/login and
generates session IDs for all users automatically. |
| [cartservice](./src/cartservice) | Go |
Stores the items in the user's shopping cart in Redis and retrieves it.
|
| [productcatalogservice](./src/productcatalogservice) | Go |
Provides the list of products from a JSON file and ability to search products
and get individual products. |
| [currencyservice](./src/currencyservice) | Go |
Converts one money amount to another currency. Uses real values fetched from
European Central Bank. It's the highest QPS service. |
@@ -39,6 +171,10 @@
microservices](./docs/img/architecture-diagram.png)](./docs/img/architecture-dia
| [checkoutservice](./src/checkoutservice) | Go |
Retrieves user cart, prepares order and orchestrates the payment, shipping and
the email notification. |
| [recommendationservice](./src/recommendationservice) | Go |
Recommends other products based on what's given in the cart.
|
| [adservice](./src/adservice) | Go |
Provides text ads based on given context words.
|
+
+
+| Script | Language |
Description
|
+|------------------------------------------------------| ------------- |
---------------------------------------------------------------------------------------------------------------------------------
|
| [loadgenerator](./src/loadgenerator) | Python+Locust |
Continuously sends requests imitating realistic user shopping flows to the
frontend. |
## Features
diff --git a/online_boutique/src/adservive/Dockerfile
b/online_boutique/src/adservice/Dockerfile
similarity index 100%
rename from online_boutique/src/adservive/Dockerfile
rename to online_boutique/src/adservice/Dockerfile
diff --git a/online_boutique/src/adservive/Makefile
b/online_boutique/src/adservice/Makefile
similarity index 100%
rename from online_boutique/src/adservive/Makefile
rename to online_boutique/src/adservice/Makefile
diff --git a/online_boutique/src/adservive/cli/main.go
b/online_boutique/src/adservice/cli/main.go
similarity index 100%
rename from online_boutique/src/adservive/cli/main.go
rename to online_boutique/src/adservice/cli/main.go
diff --git a/online_boutique/src/adservive/go.mod
b/online_boutique/src/adservice/go.mod
similarity index 100%
rename from online_boutique/src/adservive/go.mod
rename to online_boutique/src/adservice/go.mod
diff --git a/online_boutique/src/adservive/go.sum
b/online_boutique/src/adservice/go.sum
similarity index 100%
rename from online_boutique/src/adservive/go.sum
rename to online_boutique/src/adservice/go.sum
diff --git a/online_boutique/src/adservive/handler/adservice.go
b/online_boutique/src/adservice/handler/adservice.go
similarity index 100%
rename from online_boutique/src/adservive/handler/adservice.go
rename to online_boutique/src/adservice/handler/adservice.go
diff --git a/online_boutique/src/adservive/main.go
b/online_boutique/src/adservice/main.go
similarity index 100%
rename from online_boutique/src/adservive/main.go
rename to online_boutique/src/adservice/main.go
diff --git a/online_boutique/src/adservive/proto/adservice.pb.go
b/online_boutique/src/adservice/proto/adservice.pb.go
similarity index 100%
rename from online_boutique/src/adservive/proto/adservice.pb.go
rename to online_boutique/src/adservice/proto/adservice.pb.go
diff --git a/online_boutique/src/adservive/proto/adservice.proto
b/online_boutique/src/adservice/proto/adservice.proto
similarity index 100%
rename from online_boutique/src/adservive/proto/adservice.proto
rename to online_boutique/src/adservice/proto/adservice.proto
diff --git a/online_boutique/src/adservive/proto/adservice.triple.go
b/online_boutique/src/adservice/proto/adservice.triple.go
similarity index 100%
rename from online_boutique/src/adservive/proto/adservice.triple.go
rename to online_boutique/src/adservice/proto/adservice.triple.go
diff --git a/online_boutique/src/frontend/Dockerfile
b/online_boutique/src/frontendservice/Dockerfile
similarity index 100%
rename from online_boutique/src/frontend/Dockerfile
rename to online_boutique/src/frontendservice/Dockerfile
diff --git a/online_boutique/src/frontend/Makefile
b/online_boutique/src/frontendservice/Makefile
similarity index 100%
rename from online_boutique/src/frontend/Makefile
rename to online_boutique/src/frontendservice/Makefile
diff --git a/online_boutique/src/frontend/config/config.go
b/online_boutique/src/frontendservice/config/config.go
similarity index 100%
rename from online_boutique/src/frontend/config/config.go
rename to online_boutique/src/frontendservice/config/config.go
diff --git a/online_boutique/src/frontend/deployment_details.go
b/online_boutique/src/frontendservice/deployment_details.go
similarity index 100%
rename from online_boutique/src/frontend/deployment_details.go
rename to online_boutique/src/frontendservice/deployment_details.go
diff --git a/online_boutique/src/frontend/go.mod
b/online_boutique/src/frontendservice/go.mod
similarity index 100%
rename from online_boutique/src/frontend/go.mod
rename to online_boutique/src/frontendservice/go.mod
diff --git a/online_boutique/src/frontend/go.sum
b/online_boutique/src/frontendservice/go.sum
similarity index 100%
rename from online_boutique/src/frontend/go.sum
rename to online_boutique/src/frontendservice/go.sum
diff --git a/online_boutique/src/frontend/handlers.go
b/online_boutique/src/frontendservice/handlers.go
similarity index 100%
rename from online_boutique/src/frontend/handlers.go
rename to online_boutique/src/frontendservice/handlers.go
diff --git a/online_boutique/src/frontend/main.go
b/online_boutique/src/frontendservice/main.go
similarity index 100%
rename from online_boutique/src/frontend/main.go
rename to online_boutique/src/frontendservice/main.go
diff --git a/online_boutique/src/frontend/middleware.go
b/online_boutique/src/frontendservice/middleware.go
similarity index 100%
rename from online_boutique/src/frontend/middleware.go
rename to online_boutique/src/frontendservice/middleware.go
diff --git a/online_boutique/src/frontend/money/money.go
b/online_boutique/src/frontendservice/money/money.go
similarity index 100%
rename from online_boutique/src/frontend/money/money.go
rename to online_boutique/src/frontendservice/money/money.go
diff --git a/online_boutique/src/frontend/money/money_test.go
b/online_boutique/src/frontendservice/money/money_test.go
similarity index 100%
rename from online_boutique/src/frontend/money/money_test.go
rename to online_boutique/src/frontendservice/money/money_test.go
diff --git a/online_boutique/src/frontend/proto/hipstershop.pb.go
b/online_boutique/src/frontendservice/proto/hipstershop.pb.go
similarity index 100%
rename from online_boutique/src/frontend/proto/hipstershop.pb.go
rename to online_boutique/src/frontendservice/proto/hipstershop.pb.go
diff --git a/online_boutique/src/frontend/proto/hipstershop.proto
b/online_boutique/src/frontendservice/proto/hipstershop.proto
similarity index 100%
rename from online_boutique/src/frontend/proto/hipstershop.proto
rename to online_boutique/src/frontendservice/proto/hipstershop.proto
diff --git a/online_boutique/src/frontend/proto/hipstershop.triple.go
b/online_boutique/src/frontendservice/proto/hipstershop.triple.go
similarity index 100%
rename from online_boutique/src/frontend/proto/hipstershop.triple.go
rename to online_boutique/src/frontendservice/proto/hipstershop.triple.go
diff --git a/online_boutique/src/frontend/rpc.go
b/online_boutique/src/frontendservice/rpc.go
similarity index 100%
rename from online_boutique/src/frontend/rpc.go
rename to online_boutique/src/frontendservice/rpc.go
diff --git a/online_boutique/src/frontend/static/favicon-cymbal.ico
b/online_boutique/src/frontendservice/static/favicon-cymbal.ico
similarity index 100%
rename from online_boutique/src/frontend/static/favicon-cymbal.ico
rename to online_boutique/src/frontendservice/static/favicon-cymbal.ico
diff --git a/online_boutique/src/frontend/static/favicon.ico
b/online_boutique/src/frontendservice/static/favicon.ico
similarity index 100%
rename from online_boutique/src/frontend/static/favicon.ico
rename to online_boutique/src/frontendservice/static/favicon.ico
diff --git a/online_boutique/src/frontend/static/icons/Cymbal_NavLogo.svg
b/online_boutique/src/frontendservice/static/icons/Cymbal_NavLogo.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Cymbal_NavLogo.svg
rename to online_boutique/src/frontendservice/static/icons/Cymbal_NavLogo.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_Advert2.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_Advert2.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_Advert2.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_Advert2.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_CartIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_CartIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_CartIcon.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_CartIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_CheckOutIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_CheckOutIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_CheckOutIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_CheckOutIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_CurrencyIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_CurrencyIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_CurrencyIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_CurrencyIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_DownArrow.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_DownArrow.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_DownArrow.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_DownArrow.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_FacebookIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_FacebookIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_FacebookIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_FacebookIcon.svg
diff --git
a/online_boutique/src/frontend/static/icons/Hipster_GooglePlayIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_GooglePlayIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_GooglePlayIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_GooglePlayIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_HelpIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_HelpIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_HelpIcon.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_HelpIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_HeroLogo.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_HeroLogo.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_HeroLogo.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_HeroLogo.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_HeroLogoCyan.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_HeroLogoCyan.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_HeroLogoCyan.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_HeroLogoCyan.svg
diff --git
a/online_boutique/src/frontend/static/icons/Hipster_InstagramIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_InstagramIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_InstagramIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_InstagramIcon.svg
diff --git
a/online_boutique/src/frontend/static/icons/Hipster_KitchenwareOffer.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_KitchenwareOffer.svg
similarity index 100%
rename from
online_boutique/src/frontend/static/icons/Hipster_KitchenwareOffer.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_KitchenwareOffer.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_NavLogo.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_NavLogo.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_NavLogo.svg
rename to online_boutique/src/frontendservice/static/icons/Hipster_NavLogo.svg
diff --git
a/online_boutique/src/frontend/static/icons/Hipster_PinterestIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_PinterestIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_PinterestIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_PinterestIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_ProfileIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_ProfileIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_ProfileIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_ProfileIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_SearchIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_SearchIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_SearchIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_SearchIcon.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_TwitterIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_TwitterIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_TwitterIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_TwitterIcon.svg
diff --git
a/online_boutique/src/frontend/static/icons/Hipster_UpDownControl.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_UpDownControl.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_UpDownControl.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_UpDownControl.svg
diff --git a/online_boutique/src/frontend/static/icons/Hipster_YoutubeIcon.svg
b/online_boutique/src/frontendservice/static/icons/Hipster_YoutubeIcon.svg
similarity index 100%
rename from online_boutique/src/frontend/static/icons/Hipster_YoutubeIcon.svg
rename to
online_boutique/src/frontendservice/static/icons/Hipster_YoutubeIcon.svg
diff --git a/online_boutique/src/frontend/static/images/Advert2BannerImage.png
b/online_boutique/src/frontendservice/static/images/Advert2BannerImage.png
similarity index 100%
rename from online_boutique/src/frontend/static/images/Advert2BannerImage.png
rename to
online_boutique/src/frontendservice/static/images/Advert2BannerImage.png
diff --git a/online_boutique/src/frontend/static/images/AdvertBannerImage.png
b/online_boutique/src/frontendservice/static/images/AdvertBannerImage.png
similarity index 100%
rename from online_boutique/src/frontend/static/images/AdvertBannerImage.png
rename to
online_boutique/src/frontendservice/static/images/AdvertBannerImage.png
diff --git a/online_boutique/src/frontend/static/images/HeroBannerImage.png
b/online_boutique/src/frontendservice/static/images/HeroBannerImage.png
similarity index 100%
rename from online_boutique/src/frontend/static/images/HeroBannerImage.png
rename to online_boutique/src/frontendservice/static/images/HeroBannerImage.png
diff --git a/online_boutique/src/frontend/static/images/HeroBannerImage2.png
b/online_boutique/src/frontendservice/static/images/HeroBannerImage2.png
similarity index 100%
rename from online_boutique/src/frontend/static/images/HeroBannerImage2.png
rename to online_boutique/src/frontendservice/static/images/HeroBannerImage2.png
diff --git a/online_boutique/src/frontend/static/images/VRHeadsets.png
b/online_boutique/src/frontendservice/static/images/VRHeadsets.png
similarity index 100%
rename from online_boutique/src/frontend/static/images/VRHeadsets.png
rename to online_boutique/src/frontendservice/static/images/VRHeadsets.png
diff --git a/online_boutique/src/frontend/static/images/credits.txt
b/online_boutique/src/frontendservice/static/images/credits.txt
similarity index 100%
rename from online_boutique/src/frontend/static/images/credits.txt
rename to online_boutique/src/frontendservice/static/images/credits.txt
diff --git
a/online_boutique/src/frontend/static/images/folded-clothes-on-white-chair-wide.jpg
b/online_boutique/src/frontendservice/static/images/folded-clothes-on-white-chair-wide.jpg
similarity index 100%
rename from
online_boutique/src/frontend/static/images/folded-clothes-on-white-chair-wide.jpg
rename to
online_boutique/src/frontendservice/static/images/folded-clothes-on-white-chair-wide.jpg
diff --git
a/online_boutique/src/frontend/static/images/folded-clothes-on-white-chair.jpg
b/online_boutique/src/frontendservice/static/images/folded-clothes-on-white-chair.jpg
similarity index 100%
rename from
online_boutique/src/frontend/static/images/folded-clothes-on-white-chair.jpg
rename to
online_boutique/src/frontendservice/static/images/folded-clothes-on-white-chair.jpg
diff --git
a/online_boutique/src/frontend/static/img/products/bamboo-glass-jar.jpg
b/online_boutique/src/frontendservice/static/img/products/bamboo-glass-jar.jpg
similarity index 100%
rename from
online_boutique/src/frontend/static/img/products/bamboo-glass-jar.jpg
rename to
online_boutique/src/frontendservice/static/img/products/bamboo-glass-jar.jpg
diff --git a/online_boutique/src/frontend/static/img/products/candle-holder.jpg
b/online_boutique/src/frontendservice/static/img/products/candle-holder.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/candle-holder.jpg
rename to
online_boutique/src/frontendservice/static/img/products/candle-holder.jpg
diff --git a/online_boutique/src/frontend/static/img/products/hairdryer.jpg
b/online_boutique/src/frontendservice/static/img/products/hairdryer.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/hairdryer.jpg
rename to online_boutique/src/frontendservice/static/img/products/hairdryer.jpg
diff --git a/online_boutique/src/frontend/static/img/products/loafers.jpg
b/online_boutique/src/frontendservice/static/img/products/loafers.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/loafers.jpg
rename to online_boutique/src/frontendservice/static/img/products/loafers.jpg
diff --git a/online_boutique/src/frontend/static/img/products/mug.jpg
b/online_boutique/src/frontendservice/static/img/products/mug.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/mug.jpg
rename to online_boutique/src/frontendservice/static/img/products/mug.jpg
diff --git
a/online_boutique/src/frontend/static/img/products/salt-and-pepper-shakers.jpg
b/online_boutique/src/frontendservice/static/img/products/salt-and-pepper-shakers.jpg
similarity index 100%
rename from
online_boutique/src/frontend/static/img/products/salt-and-pepper-shakers.jpg
rename to
online_boutique/src/frontendservice/static/img/products/salt-and-pepper-shakers.jpg
diff --git a/online_boutique/src/frontend/static/img/products/sunglasses.jpg
b/online_boutique/src/frontendservice/static/img/products/sunglasses.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/sunglasses.jpg
rename to online_boutique/src/frontendservice/static/img/products/sunglasses.jpg
diff --git a/online_boutique/src/frontend/static/img/products/tank-top.jpg
b/online_boutique/src/frontendservice/static/img/products/tank-top.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/tank-top.jpg
rename to online_boutique/src/frontendservice/static/img/products/tank-top.jpg
diff --git a/online_boutique/src/frontend/static/img/products/watch.jpg
b/online_boutique/src/frontendservice/static/img/products/watch.jpg
similarity index 100%
rename from online_boutique/src/frontend/static/img/products/watch.jpg
rename to online_boutique/src/frontendservice/static/img/products/watch.jpg
diff --git a/online_boutique/src/frontend/static/styles/cart.css
b/online_boutique/src/frontendservice/static/styles/cart.css
similarity index 100%
rename from online_boutique/src/frontend/static/styles/cart.css
rename to online_boutique/src/frontendservice/static/styles/cart.css
diff --git a/online_boutique/src/frontend/static/styles/order.css
b/online_boutique/src/frontendservice/static/styles/order.css
similarity index 100%
rename from online_boutique/src/frontend/static/styles/order.css
rename to online_boutique/src/frontendservice/static/styles/order.css
diff --git a/online_boutique/src/frontend/static/styles/styles.css
b/online_boutique/src/frontendservice/static/styles/styles.css
similarity index 100%
rename from online_boutique/src/frontend/static/styles/styles.css
rename to online_boutique/src/frontendservice/static/styles/styles.css
diff --git a/online_boutique/src/frontend/templates/ad.html
b/online_boutique/src/frontendservice/templates/ad.html
similarity index 100%
rename from online_boutique/src/frontend/templates/ad.html
rename to online_boutique/src/frontendservice/templates/ad.html
diff --git a/online_boutique/src/frontend/templates/cart.html
b/online_boutique/src/frontendservice/templates/cart.html
similarity index 100%
rename from online_boutique/src/frontend/templates/cart.html
rename to online_boutique/src/frontendservice/templates/cart.html
diff --git a/online_boutique/src/frontend/templates/error.html
b/online_boutique/src/frontendservice/templates/error.html
similarity index 100%
rename from online_boutique/src/frontend/templates/error.html
rename to online_boutique/src/frontendservice/templates/error.html
diff --git a/online_boutique/src/frontend/templates/footer.html
b/online_boutique/src/frontendservice/templates/footer.html
similarity index 100%
rename from online_boutique/src/frontend/templates/footer.html
rename to online_boutique/src/frontendservice/templates/footer.html
diff --git a/online_boutique/src/frontend/templates/header.html
b/online_boutique/src/frontendservice/templates/header.html
similarity index 100%
rename from online_boutique/src/frontend/templates/header.html
rename to online_boutique/src/frontendservice/templates/header.html
diff --git a/online_boutique/src/frontend/templates/home.html
b/online_boutique/src/frontendservice/templates/home.html
similarity index 100%
rename from online_boutique/src/frontend/templates/home.html
rename to online_boutique/src/frontendservice/templates/home.html
diff --git a/online_boutique/src/frontend/templates/order.html
b/online_boutique/src/frontendservice/templates/order.html
similarity index 100%
rename from online_boutique/src/frontend/templates/order.html
rename to online_boutique/src/frontendservice/templates/order.html
diff --git a/online_boutique/src/frontend/templates/product.html
b/online_boutique/src/frontendservice/templates/product.html
similarity index 100%
rename from online_boutique/src/frontend/templates/product.html
rename to online_boutique/src/frontendservice/templates/product.html
diff --git a/online_boutique/src/frontend/templates/recommendations.html
b/online_boutique/src/frontendservice/templates/recommendations.html
similarity index 100%
rename from online_boutique/src/frontend/templates/recommendations.html
rename to online_boutique/src/frontendservice/templates/recommendations.html