DB_URL=postgresql://root:secret@localhost:5432/df?sslmode=disable

reset_docker:
	docker rm -vf df; docker rmi -f df; docker rm -vf postgres; docker rmi -f postgres

backend_build_image:
	docker build -t df:latest -f bff/Dockerfile

backend_run:
	make createdb; make migrateup; docker rm -vf df; docker run --name df --rmi -p 8080:8080 --network df-network -d df:latest

network:
	docker network create df-network

postgres:
	docker start postgres || docker run --name postgres -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=secret --network df-network -d postgres:15-alpine

migratenew:
	migrate create -ext sql -dir bff/db/migration -seq init_schema

migrateup:
	migrate -path bff/db/migration -database $(DB_URL) -verbose up

migratedown:
	migrate -path bff/db/migration -database $(DB_URL) -verbose down

createdb:
	docker exec -it postgres createdb --username=root --owner=root df

dropdb:
	docker exec -it postgres dropdb df

sqlc:
	sqlc generate

sqlcinit:
	sqlc init

test:
	cd bff && go test -v -cover -short -count=1 ./... && cd ..

coverage:
	cd bff && go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out && cd ..

server:
	cd bff && go run main.go && cd ..

mock:
	mockgen -package mockdb -destination bff/db/mock/store.go github.com/itsscb/df/bff/db/sqlc Store

.PHONY: postgres migratenew createdb dropdb migrateup migratedown sqlc sqlcinit test server initialize backend_build_image backend_run reset_docker