diff --git a/docker-compose.yml b/docker-compose.yml index 66dccbf5b9510a274c0585d1bc7633d82701d7a8..d6a0db8b409d161eb0a688d02fa472b24aa7e560 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,16 @@ version: “3.8†services: + emailnotification: + build: + context: ./src + dockerfile: emailnotification/Dockerfile + ports: + - "8001:8001" + depends_on: + - nats + environment: + - NATS_CONNECT=nats:4222 + - LOG_LEVEL=info # change to trace for debugging highlanderticketing: build: context: ./src @@ -7,6 +18,8 @@ services: ports: - "8000:8000" environment: + - NATS_CONNECT=nats:4222 + - EMAILNOT_CONNECT=emailnotification:8001 - DB_CONNECT=mongo:27017 - LOG_LEVEL=info # change to trace for debugging mongo: @@ -14,4 +27,9 @@ services: image: mongo:4.4 ports: - 27017:27017 - command: mongod \ No newline at end of file + command: mongod + nats: + image: nats:latest + container_name: nats + ports: + - 4222:4222 \ No newline at end of file diff --git a/go.work.sum b/go.work.sum index 89801b24256d0534b65b837a05012d7df1ef9725..53c2f4bf2b1624c1fe582fd0161efbfd39f07d31 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,15 +1,5 @@ cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= -cloud.google.com/go/compute/metadata v0.2.0 h1:nBbNSZyDpkNlo3DepaaLKVuO7ClyifSAmNloSCZrHnQ= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= -golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= diff --git a/src/emailnotification/.env b/src/emailnotification/.env index 2ac09cd1532807c6a4fea1d36cc55b6ea1db0a74..877c343c978a8acf1af72e471e6cfec1ad62e59d 100644 --- a/src/emailnotification/.env +++ b/src/emailnotification/.env @@ -1,4 +1,5 @@ # .env file -EMAIL_PW=highlanderAPI -EMAIL_ADRESS=highlanderAPI@web.de \ No newline at end of file +EMAIL_PW=NEMOWeiß1! +EMAIL_ADRESS=Yannick.ege@web.de +NATS_URL=nats://nats:4222 \ No newline at end of file diff --git a/src/emailnotification/Dockerfile b/src/emailnotification/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..1491568ffdfb24f0cd50e03e0a08a96298a62aad --- /dev/null +++ b/src/emailnotification/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.20-buster +# non-go modules dependencies +RUN apt update + +# copy code and protobuf +WORKDIR /go/src/app +COPY ./emailnotification . + +RUN go mod download +RUN go install + +RUN wget https://raw.githubusercontent.com/vishnubob/wait-for-it/81b1373f17855a4dc21156cfe1694c31d7d1792e/wait-for-it.sh +RUN chmod +x ./wait-for-it.sh ./docker-entrypoint.sh + +CMD ["emailnotification"] + +EXPOSE 8001 \ No newline at end of file diff --git a/src/emailnotification/docker-entrypoint.sh b/src/emailnotification/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..09dc0801753b82cf8d1e330ad00d339b6b9541b8 --- /dev/null +++ b/src/emailnotification/docker-entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# Abort on any error (including if wait-for-it fails). +set -e +# Wait for DB +if [ -n "$DB_CONNECT" ]; then +/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 +fi +# Wait for nats +if [ -n "$NATS_CONNECT" ]; then +/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 +fi +# Run the main container command. +exec "$@" \ No newline at end of file diff --git a/src/emailnotification/go.mod b/src/emailnotification/go.mod index 515173dd030a2ed1d333d13e3687c0df509329cc..a360529a0794f0e09f51c469d39dd951a2f06ca3 100644 --- a/src/emailnotification/go.mod +++ b/src/emailnotification/go.mod @@ -2,4 +2,18 @@ module gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/em go 1.20 -require github.com/joho/godotenv v1.5.1 +require ( + github.com/joho/godotenv v1.5.1 + github.com/nats-io/nats.go v1.27.1 +) + +require ( + github.com/golang/protobuf v1.5.3 // indirect + github.com/klauspost/compress v1.16.5 // indirect + github.com/nats-io/nats-server/v2 v2.9.19 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/sys v0.8.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect +) diff --git a/src/emailnotification/go.sum b/src/emailnotification/go.sum index d61b19e1aeb0e65b9b6051cc51a9a246feaeb292..2d4b752023f0f3424adb139e9c5abec6dafdee45 100644 --- a/src/emailnotification/go.sum +++ b/src/emailnotification/go.sum @@ -1,2 +1,28 @@ +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.19 h1:OF9jSKZGo425C/FcVVIvNgpd36CUe7aVTTXEZRJk6kA= +github.com/nats-io/nats-server/v2 v2.9.19/go.mod h1:aTb/xtLCGKhfTFLxP591CMWfkdgBmcUUSkiSOe5A3gw= +github.com/nats-io/nats.go v1.27.1 h1:OuYnal9aKVSnOzLQIzf7554OXMCG7KbaTkCSBHRcSoo= +github.com/nats-io/nats.go v1.27.1/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/src/emailnotification/main.go b/src/emailnotification/main.go index e479753e2f3888a871cbfa6d3b8628bdd32612fd..525b46e1049a73ca44dcac2e727ed9c94aff4a25 100644 --- a/src/emailnotification/main.go +++ b/src/emailnotification/main.go @@ -1,7 +1,86 @@ package main -import "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/emailnotification/service" +import ( + "fmt" + "log" + "os" + + "github.com/joho/godotenv" + "github.com/nats-io/nats.go" +) func main() { - service.SendEmail() + err := godotenv.Load(".env") + + if err != nil { + log.Fatalf("Error loading .env file") + } + fmt.Println("aufgerufen") + + //testemailcontent := model.EmialContenct{Name: "Yannick", Location: "Stuttgart"} + //receiver, body, subject := service.CreateEmail(testemailcontent, "confirmOrder") + //service.SendEmail(receiver, body, subject) + + natsUrl := os.Getenv("NATS_URL") + if nc, err := nats.Connect(natsUrl); err != nil { + fmt.Println(err, nc) + } + + go func() { + fmt.Println("wird aufgerufen") + nc, err := nats.Connect(natsUrl) + if err != nil { + log.Fatal(err) + } + defer nc.Close() + sub, err := nc.SubscribeSync("Order") + if err != nil { + log.Fatal(err) + } + + log.Println("Service hört auf die Subscription:", sub.Subject) + + for { + msg, err := sub.NextMsg(0) + if err != nil { + log.Fatal(err) + } + log.Printf("Nachricht erhalten: %s", msg.Data) + + // Führe hier deine spezifische Logik aus, um die Nachricht zu verarbeiten + + // Bestätige die Verarbeitung der Nachricht + msg.Ack() + } + + }() + + go func() { + nc, err := nats.Connect(natsUrl) + if err != nil { + log.Fatal(err) + } + defer nc.Close() + sub, err := nc.SubscribeSync("Cancelation") + if err != nil { + log.Fatal(err) + } + + log.Println("Service hört auf die Subscription:", sub.Subject) + + for { + msg, err := sub.NextMsg(0) + if err != nil { + log.Fatal(err) + } + log.Printf("Nachricht erhalten: %s", msg.Data) + + // Führe hier deine spezifische Logik aus, um die Nachricht zu verarbeiten + + // Bestätige die Verarbeitung der Nachricht + msg.Ack() + } + + }() + } diff --git a/src/emailnotification/model/emailContent.go b/src/emailnotification/model/emailContent.go new file mode 100644 index 0000000000000000000000000000000000000000..2b3decb29c20ea42b6faac65053c88f23eef5866 --- /dev/null +++ b/src/emailnotification/model/emailContent.go @@ -0,0 +1,9 @@ +package model + +type EmialContenct struct { + Name string + AwayMatch bool + Location string + Date string + Emailadress string +} diff --git a/src/emailnotification/service/send_email.go b/src/emailnotification/service/email.go similarity index 51% rename from src/emailnotification/service/send_email.go rename to src/emailnotification/service/email.go index a11f220b6f36f06127945752855fc571a73cb040..2618c2dcc4c3665c52800a139553c95790ff1e64 100644 --- a/src/emailnotification/service/send_email.go +++ b/src/emailnotification/service/email.go @@ -9,9 +9,19 @@ import ( "strings" "github.com/joho/godotenv" + "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/emailnotification/model" ) -func SendEmail( /*toList []string, subject string, body string*/ ) { +func CreateEmail(emailContenct model.EmialContenct, subject string) (string, string, string) { + if subject == "confirmOrder" { + return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird deine Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Cancelation" + } + if subject == "confirmCancelation" { + return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird die Stornierung deiner Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Order" + } + return "", "", "" +} +func SendEmail(receiver string, body string, subject string) { err := godotenv.Load(".env") if err != nil { @@ -24,15 +34,13 @@ func SendEmail( /*toList []string, subject string, body string*/ ) { } fmt.Println(from) - + // das von oben nehmen toList := []string{"yannick.ege@web.de"} header := make(map[string]string) header["From"] = from.String() header["To"] = strings.Join(toList, ", ") - header["Subject"] = "subject" - - body := "test" + header["Subject"] = subject message := "" for key, value := range header { @@ -40,7 +48,6 @@ func SendEmail( /*toList []string, subject string, body string*/ ) { } message += "\r\n" + body - // über os variablen holen smtpServer := "smtp.web.de" smtpPort := "587" password := os.Getenv("EMAIL_PW") diff --git a/src/emailnotification/wait-for-it.sh b/src/emailnotification/wait-for-it.sh new file mode 100644 index 0000000000000000000000000000000000000000..3974640b053e6f84a21c292c01e3674348445831 --- /dev/null +++ b/src/emailnotification/wait-for-it.sh @@ -0,0 +1,182 @@ +#!/usr/bin/env bash +# Use this script to test if a given TCP host/port are available + +WAITFORIT_cmdname=${0##*/} + +echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } + +usage() +{ + cat << USAGE >&2 +Usage: + $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args] + -h HOST | --host=HOST Host or IP under test + -p PORT | --port=PORT TCP port under test + Alternatively, you specify the host and port as host:port + -s | --strict Only execute subcommand if the test succeeds + -q | --quiet Don't output any status messages + -t TIMEOUT | --timeout=TIMEOUT + Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit 1 +} + +wait_for() +{ + if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then + echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" + else + echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout" + fi + WAITFORIT_start_ts=$(date +%s) + while : + do + if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then + nc -z $WAITFORIT_HOST $WAITFORIT_PORT + WAITFORIT_result=$? + else + (echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1 + WAITFORIT_result=$? + fi + if [[ $WAITFORIT_result -eq 0 ]]; then + WAITFORIT_end_ts=$(date +%s) + echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds" + break + fi + sleep 1 + done + return $WAITFORIT_result +} + +wait_for_wrapper() +{ + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ $WAITFORIT_QUIET -eq 1 ]]; then + timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & + else + timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & + fi + WAITFORIT_PID=$! + trap "kill -INT -$WAITFORIT_PID" INT + wait $WAITFORIT_PID + WAITFORIT_RESULT=$? + if [[ $WAITFORIT_RESULT -ne 0 ]]; then + echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" + fi + return $WAITFORIT_RESULT +} + +# process arguments +while [[ $# -gt 0 ]] +do + case "$1" in + *:* ) + WAITFORIT_hostport=(${1//:/ }) + WAITFORIT_HOST=${WAITFORIT_hostport[0]} + WAITFORIT_PORT=${WAITFORIT_hostport[1]} + shift 1 + ;; + --child) + WAITFORIT_CHILD=1 + shift 1 + ;; + -q | --quiet) + WAITFORIT_QUIET=1 + shift 1 + ;; + -s | --strict) + WAITFORIT_STRICT=1 + shift 1 + ;; + -h) + WAITFORIT_HOST="$2" + if [[ $WAITFORIT_HOST == "" ]]; then break; fi + shift 2 + ;; + --host=*) + WAITFORIT_HOST="${1#*=}" + shift 1 + ;; + -p) + WAITFORIT_PORT="$2" + if [[ $WAITFORIT_PORT == "" ]]; then break; fi + shift 2 + ;; + --port=*) + WAITFORIT_PORT="${1#*=}" + shift 1 + ;; + -t) + WAITFORIT_TIMEOUT="$2" + if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + WAITFORIT_TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + WAITFORIT_CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage +fi + +WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15} +WAITFORIT_STRICT=${WAITFORIT_STRICT:-0} +WAITFORIT_CHILD=${WAITFORIT_CHILD:-0} +WAITFORIT_QUIET=${WAITFORIT_QUIET:-0} + +# Check to see if timeout is from busybox? +WAITFORIT_TIMEOUT_PATH=$(type -p timeout) +WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH) + +WAITFORIT_BUSYTIMEFLAG="" +if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then + WAITFORIT_ISBUSY=1 + # Check if busybox timeout uses -t flag + # (recent Alpine versions don't support -t anymore) + if timeout &>/dev/stdout | grep -q -e '-t '; then + WAITFORIT_BUSYTIMEFLAG="-t" + fi +else + WAITFORIT_ISBUSY=0 +fi + +if [[ $WAITFORIT_CHILD -gt 0 ]]; then + wait_for + WAITFORIT_RESULT=$? + exit $WAITFORIT_RESULT +else + if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then + wait_for_wrapper + WAITFORIT_RESULT=$? + else + wait_for + WAITFORIT_RESULT=$? + fi +fi + +if [[ $WAITFORIT_CLI != "" ]]; then + if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then + echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess" + exit $WAITFORIT_RESULT + fi + exec "${WAITFORIT_CLI[@]}" +else + exit $WAITFORIT_RESULT +fi \ No newline at end of file diff --git a/src/highlanderticketing/.env b/src/highlanderticketing/.env new file mode 100644 index 0000000000000000000000000000000000000000..82bb259b9826c12af7f8a1c1652870cdd4ea50c1 --- /dev/null +++ b/src/highlanderticketing/.env @@ -0,0 +1 @@ +NATS_URL=nats://nats:4222 \ No newline at end of file diff --git a/src/highlanderticketing/docker-entrypoint.sh b/src/highlanderticketing/docker-entrypoint.sh index 0f753f16b9d1488c1daf77ae2225dccd734d2ddd..8e1940f55f098449f0d5294e970b18d26ddb4358 100644 --- a/src/highlanderticketing/docker-entrypoint.sh +++ b/src/highlanderticketing/docker-entrypoint.sh @@ -5,5 +5,13 @@ set -e if [ -n "$DB_CONNECT" ]; then /go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 fi +# Wait for nats +if [ -n "$NATS_CONNECT" ]; then +/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 +fi +# Wait for emailnotification +if [ -n "$NATS_CONNECT" ]; then +/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 +fi # Run the main container command. exec "$@" \ No newline at end of file diff --git a/src/highlanderticketing/go.mod b/src/highlanderticketing/go.mod index d37dd2056f1cd4ed49d01d4a6cc51fb9e1d7dd39..a3d928838ae93473b96e230e182a63892d326f71 100644 --- a/src/highlanderticketing/go.mod +++ b/src/highlanderticketing/go.mod @@ -3,6 +3,8 @@ module gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/hi go 1.20 require ( + github.com/joho/godotenv v1.5.1 + github.com/nats-io/nats.go v1.27.1 golang.org/x/oauth2 v0.9.0 google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc ) @@ -11,8 +13,11 @@ require ( cloud.google.com/go/compute/metadata v0.2.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.1 // indirect - github.com/klauspost/compress v1.13.6 // indirect + github.com/klauspost/compress v1.16.5 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/nats-io/nats-server/v2 v2.9.19 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.1 // indirect diff --git a/src/highlanderticketing/go.sum b/src/highlanderticketing/go.sum index 4db6e249a882c9d105220fd75d155ba27d4b5294..e5f612623a9416bc9a8659010bc25bc8008afec4 100644 --- a/src/highlanderticketing/go.sum +++ b/src/highlanderticketing/go.sum @@ -14,15 +14,28 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.19 h1:OF9jSKZGo425C/FcVVIvNgpd36CUe7aVTTXEZRJk6kA= +github.com/nats-io/nats-server/v2 v2.9.19/go.mod h1:aTb/xtLCGKhfTFLxP591CMWfkdgBmcUUSkiSOe5A3gw= +github.com/nats-io/nats.go v1.27.1 h1:OuYnal9aKVSnOzLQIzf7554OXMCG7KbaTkCSBHRcSoo= +github.com/nats-io/nats.go v1.27.1/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -71,6 +84,7 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go index 257c5404d0aa5c1a924a2e1eb6ac41cafbf3134a..6801c5c70334113b85c879f60f3756541d693378 100644 --- a/src/highlanderticketing/main.go +++ b/src/highlanderticketing/main.go @@ -1,10 +1,14 @@ package main import ( + "fmt" "net/http" "os" + "time" "github.com/gorilla/mux" + "github.com/joho/godotenv" + "github.com/nats-io/nats.go" log "github.com/sirupsen/logrus" "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/db" "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/handler" @@ -18,6 +22,17 @@ func main() { service.DeleteAllMatches() api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")*/ //init db + + if err := godotenv.Load(".env"); err != nil { + log.Fatalf("Error loading .env file") + } + + natsUrl := os.Getenv("NATS_URL") + nc, _ := nats.Connect(natsUrl) + + rep, _ := nc.Request("Order", nil, time.Second) + fmt.Println("hier die response", rep) + _, err := db.GetMongoClient() if err != nil { log.Fatal(err) diff --git a/src/highlanderticketing/model/emailContent.go b/src/highlanderticketing/model/emailContent.go new file mode 100644 index 0000000000000000000000000000000000000000..10dedd323363b9e038809c5193bb035f3452c46f --- /dev/null +++ b/src/highlanderticketing/model/emailContent.go @@ -0,0 +1,9 @@ +package model + +type EmialContent struct { + string + Name string + AwayMatch bool + Location string + Date string +}