diff --git a/backend/.gitignore b/backend/.gitignore index 0795065..fcbf23e 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,2 +1,3 @@ screenmark +.env.docker .env diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..1ab2a73 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,15 @@ +FROM golang + +WORKDIR /app + +# Dependency management +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN go build -o /app/haystack + +EXPOSE 3040 + +CMD ["/app/haystack"] diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..d8cd091 --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,27 @@ +services: + database: + image: postgres + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + volumes: + - ./schema.sql:/docker-entrypoint-initdb.d/schema.sql + ports: + - 4321:5432 + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d haystack_db"] + interval: 10s + retries: 5 + start_period: 5s + timeout: 5s + backend: + build: . + restart: always + env_file: .env.docker + ports: + - 3040:3040 + depends_on: + database: + condition: service_healthy + restart: true diff --git a/backend/main.go b/backend/main.go index 6d472b1..51bb0f2 100644 --- a/backend/main.go +++ b/backend/main.go @@ -5,6 +5,7 @@ import ( "io" "log" "net/http" + "os" "screenmark/screenmark/models" "time" @@ -23,7 +24,7 @@ func main() { panic(err) } - listener := pq.NewListener(models.CONNECTION, time.Second, time.Second, func(event pq.ListenerEventType, err error) { + listener := pq.NewListener(os.Getenv("DB_CONNECTION"), time.Second, time.Second, func(event pq.ListenerEventType, err error) { if err != nil { panic(err) } @@ -103,7 +104,7 @@ func main() { } }) - log.Println("Listening and serving.") + log.Println("Listening and serving on port 3040.") http.ListenAndServe(":3040", mux) } diff --git a/backend/models/database.go b/backend/models/database.go index 87edbb8..fb6f08b 100644 --- a/backend/models/database.go +++ b/backend/models/database.go @@ -2,16 +2,22 @@ package models import ( "database/sql" + "errors" + "os" _ "github.com/lib/pq" ) -const CONNECTION = "postgresql://localhost:5432/haystack?sslmode=disable" - var db *sql.DB func InitDatabase() error { - database, err := sql.Open("postgres", CONNECTION) + connection := os.Getenv("DB_CONNECTION") + + if len(connection) == 0 { + return errors.New("DB_CONNECTION env was not found.") + } + + database, err := sql.Open("postgres", connection) db = database diff --git a/backend/models/image.go b/backend/models/image.go index 39d91e9..891ec67 100644 --- a/backend/models/image.go +++ b/backend/models/image.go @@ -3,11 +3,13 @@ package models import ( "errors" "fmt" + "log" - . "github.com/go-jet/jet/v2/postgres" "screenmark/screenmark/.gen/haystack/haystack/model" . "screenmark/screenmark/.gen/haystack/haystack/table" + . "github.com/go-jet/jet/v2/postgres" + "github.com/google/uuid" ) @@ -22,6 +24,8 @@ func GetImage(imageId string) (model.UserImages, error) { id := uuid.MustParse(imageId) stmt := UserImages.SELECT(UserImages.ImageName, UserImages.Image).WHERE(UserImages.ID.EQ(UUID(id))) + log.Println(stmt.DebugSql()) + images := []model.UserImages{} err := stmt.Query(db, &images) diff --git a/backend/schema.sql b/backend/schema.sql index edbd83d..91dabf3 100644 --- a/backend/schema.sql +++ b/backend/schema.sql @@ -1,3 +1,6 @@ +DROP DATABASE IF EXISTS haystack_db; +CREATE DATABASE haystack_db; + DROP SCHEMA IF EXISTS haystack CASCADE; CREATE SCHEMA haystack; @@ -53,4 +56,8 @@ $$ LANGUAGE plpgsql; CREATE OR REPLACE TRIGGER on_new_image AFTER INSERT ON haystack.user_images FOR EACH ROW -EXECUTE PROCEDURE notify_new_image() +EXECUTE PROCEDURE notify_new_image(); + +/* -----| Test Data |----- */ + +INSERT INTO haystack.users VALUES ('fcc22dbb-7792-4595-be8e-d0439e13990a');