diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6b8710a --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d3883b7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.16-alpine AS builder + +COPY . /meditime + +WORKDIR /meditime + +RUN go build + +FROM alpine:3.13 + +RUN apk add --no-cache \ + ca-certificates \ + tzdata + +COPY --from=builder /meditime/meditime /usr/local/bin/meditime + +ENTRYPOINT ["/usr/local/bin/meditime"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..da8c366 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +IMAGE_REGISTRY = registry.0xdad.com/meditime +IMAGE_TAG = latest + +.PHONY: build +build: + docker build -t "${IMAGE_REGISTRY}:${IMAGE_TAG}" . + +.PHONY: deploy +deploy: build + docker push "${IMAGE_REGISTRY}:${IMAGE_TAG}" diff --git a/db/badger.go b/db/badger.go index d30f987..57d5943 100644 --- a/db/badger.go +++ b/db/badger.go @@ -148,6 +148,13 @@ func (b *Badger) AddMedication(medication *Medication) error { }) } +// RemoveMedication from the database +func (b *Badger) RemoveMedication(medication *Medication) error { + return b.db.Update(func(tx *badger.Txn) error { + return tx.Delete(medication.badgerKey()) + }) +} + // ListMedicationsForUser from the database func (b *Badger) ListMedicationsForUser(user *User) (medications []*Medication, err error) { err = b.db.View(func(tx *badger.Txn) error { diff --git a/main.go b/main.go index ae9e92c..00806bf 100644 --- a/main.go +++ b/main.go @@ -270,6 +270,36 @@ func main() { log(medication) + case "remove": + fmt.Print("username: ") + inputScanner.Scan() + + username := string(bytes.TrimSpace(inputScanner.Bytes())) + if username == "" { + return fmt.Errorf("failed to get username from STDIN prompt: %w", inputScanner.Err()) + } + + user, err := b.GetUser(username) + if err != nil { + return fmt.Errorf("failed to lookup username %s: %w", username, err) + } + + if user == nil { + return fmt.Errorf("username %s doesn't exist", username) + } + + fmt.Print("medication id: ") + inputScanner.Scan() + + medicationID := uuid.MustParse(string(bytes.TrimSpace(inputScanner.Bytes()))) + err = b.RemoveMedication(&db.Medication{ + IDUser: user.ID, + ID: medicationID, + }) + if err != nil { + return err + } + case "list": fmt.Print("username: ") inputScanner.Scan()