Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/furkan-gulsen/checkout-system
The project is a mini e-commerce checkout developed with Go, incorporating features such as cart management, various product types, and promotions. It utilizes technologies like Go, Docker, Grafana, and Prometheus.
https://github.com/furkan-gulsen/checkout-system
checkout-system docker go go-checkout-system go-prometheus golang golang-checkout-system prometheus shopping-checkout-application
Last synced: 7 days ago
JSON representation
The project is a mini e-commerce checkout developed with Go, incorporating features such as cart management, various product types, and promotions. It utilizes technologies like Go, Docker, Grafana, and Prometheus.
- Host: GitHub
- URL: https://github.com/furkan-gulsen/checkout-system
- Owner: Furkan-Gulsen
- License: mit
- Created: 2024-01-03T17:29:20.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-27T22:12:01.000Z (10 months ago)
- Last Synced: 2024-06-19T03:13:48.457Z (8 months ago)
- Topics: checkout-system, docker, go, go-checkout-system, go-prometheus, golang, golang-checkout-system, prometheus, shopping-checkout-application
- Language: Go
- Homepage:
- Size: 789 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Shopping Checkout Application
## Technologies Used
- Go
- Docker
- Grafana
- Prometheus
- Swagger
- MongoDB## Functional Requirements
1. **Cart Management**: Handle up to 10 unique items (excluding VasItems) and a total of 30 products. The total cart amount should not exceed 500,000 TL.
2. **Item Varieties**: Support for different item types like VasItem, DefaultItem, DigitalItem, with specific constraints on quantity and identification.
3. **Digital Items**: Restriction on the quantity and specific categorization (CategoryID 7889).
4. **Default Items**: Common e-commerce products with pricing rules in relation to VasItems.
5. **VasItems**: Represent value-added services, constrained by category and seller ID.
6. **Promotions**: Implementation of various discount strategies like SameSellerPromotion, CategoryPromotion, and TotalPricePromotion.## Non-Functional Requirements
1. **Reliability**: Robust error handling and consistent performance.
2. **Usability**: Simple and intuitive http-request-based interaction.
3. **Maintainability**: Code should adhere to SOLID principles, Domain Driven Design and be easy to modify or extend.
4. **Performance**: Optimized for fast processing of cart operations.## Prerequisites
- Go environment setup for development.
- Docker installed for containerization (optional).
- Grafana and Prometheus for monitoring and analytics (optional).## UML Class Diagram
![UML Class Diagram](./assets/uml_class_diagram.png)
## Usage
### Running the Application
- **Direct Execution**:
- After building, you can run the application using:
```
make run
```
- This will start the application using the compiled binary.- **Development Mode**:
- For development purposes, you can run the application directly with Go using:
```
make dev
```
- This allows you to run the application without compiling it first.- **Docker**:
- To run the application in a Docker container, use:
```
make up
```
- This will build and run the application in a Docker container as defined in your `docker-compose` file.
- To stop and remove the container, use:
```
make down
```### Swagger Documentation
- To generate Swagger documentation, run:
```
make swag
```
- This will create Swagger documentation based on your code annotations.## Testing
### Running Tests
- **Persistence Tests**:
- To run persistence layer tests, execute:
```
make persistance-tests
```
- This will run tests located in the `./internal/infrastructure/persistence` directory.- **Application Tests**:
- For application layer tests, execute:
```
make application-tests
```
- This will run tests in the `./internal/application` directory.## Swagger Page
![Swagger](./assets/swagger.png)
## Grafana Page
![Grafana](./assets/grafana.png)