diff --git a/src/highlanderticketing/handler/order.go b/src/highlanderticketing/handler/order.go index 6e0519e5ccda72ae1ff50706e956e131628f3307..862e81e0fbd4032c3b387b02bfe8ec635d89facc 100644 --- a/src/highlanderticketing/handler/order.go +++ b/src/highlanderticketing/handler/order.go @@ -25,9 +25,20 @@ func AddMatchOrder(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusBadRequest) return } + reqToken, err := getBearerToken(r) + if err != nil { + log.Errorf("Failure loading bearer token %v", err) + http.Error(w, err.Error(), http.StatusBadRequest) + } + userOfOrder, err := service.GetUserInfo(reqToken) + if err != nil { + log.Errorf("Failure loading user Info %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + } + order.User = userOfOrder err = service.AddMatchOrder(id, order) if err != nil { - log.Errorf("Failure adding donation to campaign with ID %v: %v", id, err) + log.Errorf("Failure adding order to match with ID %v: %v", id, err) http.Error(w, err.Error(), http.StatusInternalServerError) return } @@ -50,6 +61,17 @@ func AddTravelOrder(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusBadRequest) return } + reqToken, err := getBearerToken(r) + if err != nil { + log.Errorf("Failure loading bearer token %v", err) + http.Error(w, err.Error(), http.StatusBadRequest) + } + userOfOrder, err := service.GetUserInfo(reqToken) + if err != nil { + log.Errorf("Failure loading user Info %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + } + order.User = userOfOrder err = service.AddTravelOrder(id, order) if err != nil { log.Errorf("Failure adding donation to campaign with ID %v: %v", id, err) diff --git a/src/highlanderticketing/service/nats.go b/src/highlanderticketing/service/nats.go index 59b22dceca44f179138aa63a608e69fe86e61baa..103bbf39c2eb52805bedfe9a909e0a8f1c876547 100644 --- a/src/highlanderticketing/service/nats.go +++ b/src/highlanderticketing/service/nats.go @@ -4,8 +4,10 @@ import ( "encoding/json" "fmt" "log" + "os" "time" + "github.com/joho/godotenv" "github.com/nats-io/nats.go" "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model" ) @@ -14,6 +16,23 @@ type NatsServer struct { Nc *nats.Conn } +func ConnectToNats() (NatsServer, error) { + var natsServer NatsServer + if err := godotenv.Load(".env"); err != nil { + log.Fatalf("Error loading .env file") + } + uri := os.Getenv("NATS_URI") + nc, err := nats.Connect(uri) + if err != nil { + log.Fatal("Error establishing connection to NATS:", err) + return natsServer, err + } + natsServer.Nc = nc + fmt.Println("Connected to NATS at:", natsServer.Nc.ConnectedUrl()) + return natsServer, nil + +} + func (s NatsServer) ConfirmOrder(e *model.EmialContent) { var res *model.Response emailContenct, errMarshal := json.Marshal(e) diff --git a/src/highlanderticketing/service/order.go b/src/highlanderticketing/service/order.go index f2f2f430a340a01dce3032aeeede63e670db1077..bd8a876c287b8c140d4e70b723790f2a5244133b 100644 --- a/src/highlanderticketing/service/order.go +++ b/src/highlanderticketing/service/order.go @@ -13,6 +13,7 @@ import ( func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error { filter := bson.D{primitive.E{Key: "_id", Value: matchID}} order.ID = primitive.NewObjectID() + matchToFind := model.Match{} updater := bson.D{primitive.E{Key: "$push", Value: bson.D{ primitive.E{Key: "orders", Value: order}, @@ -24,6 +25,11 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error { } collection := client.Database(db.DB).Collection(db.MATCHES) + err = collection.FindOne(context.TODO(), filter).Decode(&matchToFind) + if err != nil { + return err + } + updateResult, err := collection.UpdateOne(context.TODO(), filter, updater) if err != nil { return err @@ -33,12 +39,19 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error { return fmt.Errorf("no document was updated") } + natsServer, err := ConnectToNats() + defer natsServer.Nc.Close() + + emailContenct := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: matchToFind.ID.String()} + natsServer.ConfirmOrder(&emailContenct) + return nil } func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error { filter := bson.D{primitive.E{Key: "_id", Value: matchID}} order.ID = primitive.NewObjectID() + matchToFind := model.Match{} updater := bson.M{"$push": bson.M{"travel.orders": order}} @@ -48,6 +61,11 @@ func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error { } collection := client.Database(db.DB).Collection(db.MATCHES) + err = collection.FindOne(context.TODO(), filter).Decode(&matchToFind) + if err != nil { + return err + } + updateResult, err := collection.UpdateOne(context.TODO(), filter, updater) if err != nil { return err @@ -57,6 +75,12 @@ func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error { return fmt.Errorf("no document was updated") } + natsServer, err := ConnectToNats() + defer natsServer.Nc.Close() + + emailContenct := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: matchToFind.ID.String()} + natsServer.ConfirmOrder(&emailContenct) + return nil } func CancelOrder() {