60 lines
1.8 KiB
Markdown
60 lines
1.8 KiB
Markdown
# Cake Order Tracker
|
|
|
|
A lightweight, robust order management system.
|
|
|
|
## Key Features
|
|
|
|
* **Order Lifecycle Management:** Full CRUD operations for products and customer orders.
|
|
* **Search:** Order filtering by date range, and keyword search.
|
|
* **Easy Deployment:** Single-binary deployment utilizing Go, along with a single database file.
|
|
* **Interactive Client-Side Logic:** Dynamic order composition with real-time total price calculation.
|
|
|
|
## Tech Stack
|
|
|
|
* **Backend:** Go
|
|
* **Database:** SQLite
|
|
* **Frontend:** HTMX, Templ, CSS, JavaScript
|
|
* **Tooling:** Versioned SQL Migrations, Go Toolchain, Templ
|
|
|
|
## Architectural Highlights
|
|
|
|
### 1. Database Persistence
|
|
|
|
The system implements a versioned migration system. The schema handles relationships between orders and products via join tables, ensuring integrity through the `database/sql` package's transaction support.
|
|
|
|
### 2. Separation of Concerns
|
|
|
|
* **/models**: Pure data structures for cross-package communication.
|
|
* **/store**: Encapsulated data persistence layer containing all SQL logic and migrations.
|
|
* **/server**: HTTP routing, handler logic, and template rendering.
|
|
|
|
## Installation and Running
|
|
|
|
### **Run the application:**
|
|
```bash
|
|
git clone git.bronku.xyz/bronku/cake-order-tracker
|
|
cd cake-order-tracker
|
|
go generate && go run .
|
|
```
|
|
|
|
### Deployment
|
|
1. Build the application
|
|
``` bash
|
|
git clone git.bronku.xyz/bronku/cake-order-tracker
|
|
cd cake-order-tracker
|
|
go generate && go build .
|
|
```
|
|
|
|
2. Install the binary
|
|
```bash
|
|
# shouldn't be necessary if the binary was built on the same machine
|
|
sudo chmod +x cake-order-tracker
|
|
|
|
# move to a diractory you have in $PATH
|
|
sudo mv cake-order-tracker /usr/local/bin
|
|
```
|
|
|
|
3. Setup a systemd service (if yyou don't use systemd, then you probably don't need any instructions)
|
|
```
|
|
# it is recommended to create a dedicated user
|
|
sudo useradd
|