forked from ebhomengo/niki
feat: add product domain entity
This commit is contained in:
parent
8b19bd8d8d
commit
23fedc02c3
119
Makefile
119
Makefile
|
|
@ -1,54 +1,64 @@
|
|||
# TODO: add commands for build and run in dev/produciton mode
|
||||
# --- Variables ---
|
||||
BINARY_NAME ?= niki
|
||||
BUILD_DIR ?= bin
|
||||
|
||||
ROOT=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))
|
||||
# ====================================================================================
|
||||
# General Go Commands
|
||||
# ====================================================================================
|
||||
.PHONY: start test build clean mod-tidy lint install-linter help format swagger watch
|
||||
|
||||
.PHONY: help confirm lint test format build run docker swagger watch migrate/status migrate/new migrate/up migrate/down
|
||||
|
||||
confirm:
|
||||
@echo -n 'Are you sure? [y/N] ' && read ans && [ $${ans:-N} = y ]
|
||||
|
||||
lint:
|
||||
which golangci-lint || (go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.0)
|
||||
golangci-lint run --config=$(ROOT)/.golangci.yml $(ROOT)/...
|
||||
start: build
|
||||
$(BUILD_DIR)/$(BINARY_NAME)
|
||||
|
||||
test:
|
||||
go test -v ./...
|
||||
|
||||
build:
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
go build -o $(BUILD_DIR)/$(BINARY_NAME) main.go
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)/
|
||||
|
||||
mod-tidy:
|
||||
go mod tidy
|
||||
|
||||
lint:
|
||||
golangci-lint run
|
||||
|
||||
install-linter:
|
||||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||||
|
||||
format:
|
||||
@which gofumpt || (go install mvdan.cc/gofumpt@latest)
|
||||
@gofumpt -l -w $(ROOT)
|
||||
@gofumpt -l -w .
|
||||
@which gci || (go install github.com/daixiang0/gci@latest)
|
||||
@gci write $(ROOT) --skip-generated --skip-vendor
|
||||
@which golangci-lint || (go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.0)
|
||||
@gci write . --skip-generated --skip-vendor
|
||||
@golangci-lint run --fix
|
||||
|
||||
build:
|
||||
go build -o niki main.go
|
||||
|
||||
run:
|
||||
go run main.go --migrate
|
||||
|
||||
docker:
|
||||
sudo docker compose up -d
|
||||
|
||||
swagger:
|
||||
swag init
|
||||
|
||||
# Live Reload
|
||||
watch:
|
||||
@if command -v CompileDaemon > /dev/null; then \
|
||||
CompileDaemon -exclude-dir=.git -exclude=".#*" -command="./niki"; \
|
||||
CompileDaemon -exclude-dir=.git -exclude=".#*" -command="./$(BUILD_DIR)/$(BINARY_NAME)"; \
|
||||
else \
|
||||
read -p "Go's 'CompileDaemon' is not installed on your machine. Do you want to install it? [Y/n] " choice; \
|
||||
read -p "Go's 'CompileDaemon' is not installed. Do you want to install it? [Y/n] " choice; \
|
||||
if [ "$$choice" != "n" ] && [ "$$choice" != "N" ]; then \
|
||||
go install github.com/githubnemo/CompileDaemon@latest; \
|
||||
CompileDaemon -exclude-dir=.git -exclude=".#*" -command="./niki"; \
|
||||
CompileDaemon -exclude-dir=.git -exclude=".#*" -command="./$(BUILD_DIR)/$(BINARY_NAME)"; \
|
||||
else \
|
||||
echo "You chose not to install CompileDaemon. Exiting..."; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi
|
||||
|
||||
# ====================================================================================
|
||||
# Database Migration Commands (legacy niki-core)
|
||||
# ====================================================================================
|
||||
.PHONY: migrate/status migrate/new migrate/up migrate/down
|
||||
|
||||
migrate/status:
|
||||
@sql-migrate status -env="production" -config=repository/mysql/dbconfig.yml
|
||||
|
||||
|
|
@ -64,3 +74,62 @@ migrate/up: confirm
|
|||
migrate/down: confirm
|
||||
@echo 'Tearing down last migration...'
|
||||
@sql-migrate down -env="production" -config=repository/mysql/dbconfig.yml -limit=1
|
||||
|
||||
confirm:
|
||||
@echo -n 'Are you sure? [y/N] ' && read ans && [ $${ans:-N} = y ]
|
||||
|
||||
# ====================================================================================
|
||||
# Productapp Service Commands
|
||||
# ====================================================================================
|
||||
.PHONY: productapp-up productapp-up-logs
|
||||
|
||||
PRODUCTAPP_ENV = deploy/productapp/development/.env
|
||||
PRODUCTAPP_COMPOSE = deploy/productapp/development/docker-compose.yml
|
||||
|
||||
productapp-up:
|
||||
@echo "Building and starting productapp full stack..."
|
||||
docker compose --env-file $(PRODUCTAPP_ENV) -f $(PRODUCTAPP_COMPOSE) up --build -d
|
||||
@echo "productapp stack is up."
|
||||
|
||||
productapp-up-logs:
|
||||
@echo "Building and starting productapp full stack..."
|
||||
docker compose --env-file $(PRODUCTAPP_ENV) -f $(PRODUCTAPP_COMPOSE) up --build
|
||||
|
||||
# ====================================================================================
|
||||
# Docker Commands (legacy)
|
||||
# ====================================================================================
|
||||
.PHONY: docker
|
||||
|
||||
docker:
|
||||
docker compose up -d
|
||||
|
||||
# ====================================================================================
|
||||
# Help Target
|
||||
# ====================================================================================
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo ""
|
||||
@echo "General Go Commands:"
|
||||
@echo " start - Build and run niki-core locally"
|
||||
@echo " test - Run tests"
|
||||
@echo " build - Compile binary"
|
||||
@echo " clean - Remove build artifacts"
|
||||
@echo " mod-tidy - Clean up dependencies"
|
||||
@echo " format - Format code (gofumpt + gci + lint fix)"
|
||||
@echo " lint - Run linters"
|
||||
@echo " install-linter - Install golangci-lint"
|
||||
@echo " swagger - Generate swagger docs"
|
||||
@echo " watch - Live reload with CompileDaemon"
|
||||
@echo ""
|
||||
@echo "Database Migration (niki-core):"
|
||||
@echo " migrate/status - Show migration status"
|
||||
@echo " migrate/new - Create new migration (name=<name>)"
|
||||
@echo " migrate/up - Run migrations up"
|
||||
@echo " migrate/down - Rollback last migration"
|
||||
@echo ""
|
||||
@echo "Productapp Service:"
|
||||
@echo " productapp-up - Build and start full stack in background"
|
||||
@echo " productapp-up-logs - Build and start full stack with logs"
|
||||
@echo ""
|
||||
@echo "Docker (legacy):"
|
||||
@echo " docker - Start docker-compose services"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
ARG GO_IMAGE_NAME
|
||||
ARG GO_IMAGE_VERSION
|
||||
|
||||
FROM ${GO_IMAGE_NAME}:${GO_IMAGE_VERSION}
|
||||
ENV GOPROXY=https://package-mirror.liara.ir/repository/go/
|
||||
ENV GOSUMDB=off
|
||||
|
||||
|
||||
|
||||
WORKDIR /home/app
|
||||
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
RUN go build -mod=mod -o /bin/productapp cmd/productapp/main.go
|
||||
|
||||
CMD ["/bin/productapp", "serve"]
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
services:
|
||||
productapp-mysql:
|
||||
image: mirror2.chabokan.net/mysql:8.0
|
||||
container_name: productapp-mysql
|
||||
restart: always
|
||||
ports:
|
||||
- "3307:3306"
|
||||
volumes:
|
||||
- productapp-mysql-data:/var/lib/mysql
|
||||
environment:
|
||||
MYSQL_DATABASE: niki_db
|
||||
MYSQL_ROOT_PASSWORD: secret
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
productapp-mysql-data:
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
services:
|
||||
productapp-app:
|
||||
build:
|
||||
context: ../../..
|
||||
dockerfile: deploy/productapp/development/Dockerfile
|
||||
args:
|
||||
GO_IMAGE_NAME: ${GO_IMAGE_NAME}
|
||||
GO_IMAGE_VERSION: ${GO_IMAGE_VERSION}
|
||||
container_name: productapp-app
|
||||
ports:
|
||||
- "8080:8080"
|
||||
command: /bin/sh -c "/bin/productapp migrate --up && /bin/productapp serve"
|
||||
environment:
|
||||
DB_HOST: productapp-mysql
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: secret
|
||||
DB_NAME: niki_db
|
||||
MIGRATION_PATH: /home/app/productapp/repository/migrations
|
||||
depends_on:
|
||||
productapp-mysql:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
|
||||
productapp-mysql:
|
||||
image: mirror2.chabokan.net/mysql:8.0
|
||||
container_name: productapp-mysql
|
||||
restart: always
|
||||
ports:
|
||||
- "3307:3306"
|
||||
volumes:
|
||||
- productapp-mysql-data:/var/lib/mysql
|
||||
environment:
|
||||
MYSQL_DATABASE: niki_db
|
||||
MYSQL_ROOT_PASSWORD: secret
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
productapp-mysql-data:
|
||||
|
|
@ -9,8 +9,7 @@ CREATE TABLE `products` (
|
|||
`is_active` BOOLEAN DEFAULT TRUE,
|
||||
`features` JSON DEFAULT NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`deleted_at` TIMESTAMP DEFAULT NULL,
|
||||
FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL
|
||||
`deleted_at` TIMESTAMP DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_persian_ci;
|
||||
|
||||
-- +migrate Down
|
||||
|
|
|
|||
Loading…
Reference in New Issue