diff --git a/src/highlanderticketing/db/db.go b/src/highlanderticketing/db/db.go index fa6214625dd85ce90a9535f90fb00a70d6b3ffeb..be259014283a8e3a94c5b117956da9415eb60816 100644 --- a/src/highlanderticketing/db/db.go +++ b/src/highlanderticketing/db/db.go @@ -18,7 +18,6 @@ const ( CONNECTIONSTRING = "mongodb://localhost:27017" DB = "db_issue_manager" MATCHES = "col_matches" - TRAVEL = "col_travel" POOL_SIZE = 10 // Anzahl der Verbindungen im Pool ) diff --git a/src/highlanderticketing/db/fill_db.go b/src/highlanderticketing/db/fill_db.go new file mode 100644 index 0000000000000000000000000000000000000000..0939d50c3e93b241e954f8a369cdd5b15f405737 --- /dev/null +++ b/src/highlanderticketing/db/fill_db.go @@ -0,0 +1,4 @@ +package db + +func Fill_db() { +} diff --git a/src/highlanderticketing/handler/order.go b/src/highlanderticketing/handler/order.go index abeebd162ee44d9c076ced7c51310c2501f7b7af..72b034f7e23ef44ee6a039334e4a786aba79a5db 100644 --- a/src/highlanderticketing/handler/order.go +++ b/src/highlanderticketing/handler/order.go @@ -1 +1,44 @@ package handler + +import ( + "encoding/json" + "net/http" + + log "github.com/sirupsen/logrus" + "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model" + "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/service" +) + +func AddMatchOrder(w http.ResponseWriter, r *http.Request) { + id, err := getID(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + order, err := getMatchOrder(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.AddMatchOrder(id, order) + if err != nil { + log.Errorf("Failure adding donation to campaign with ID %v: %v", id, err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, order) + +} + +func getMatchOrder(r *http.Request) (*model.Order, error) { + var order model.Order + err := json.NewDecoder(r.Body).Decode(&order) + if err != nil { + log.Errorf("Can't serialize request body to order struct: %v", err) + return nil, err + } else { + log.Infof("request body seralized to order struct") + log.Tracef("body seralized in struct order: %v", order) + } + return &order, nil +} diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go index b667c44259b3b0be169532da3b2e1d1e9bfc0ba8..3889c2379f727b7de6d1d1116e6caa2449e51892 100644 --- a/src/highlanderticketing/main.go +++ b/src/highlanderticketing/main.go @@ -24,6 +24,7 @@ func main() { router.HandleFunc("/match/{id}", handler.GetMatchByID).Methods("GET") router.HandleFunc("/match/{id}", handler.UpdateMatch).Methods("PUT") router.HandleFunc("/match/{id}", handler.DeleteMatch).Methods("DELETE") + router.HandleFunc("/match/{id}/matchorder", handler.AddMatchOrder).Methods("POST") if err := http.ListenAndServe(":8000", router); err != nil { log.Fatal(err) } diff --git a/src/highlanderticketing/model/match.go b/src/highlanderticketing/model/match.go index 3d36e57ca41831a0701ff73ded32a9bef38399e5..dd42a149e708afc068b61424f56ed4132389c74b 100644 --- a/src/highlanderticketing/model/match.go +++ b/src/highlanderticketing/model/match.go @@ -11,26 +11,9 @@ type Match struct { AvailableTicketAmount int32 `bson:"available_ticket_amount"` AwayMatch bool `bson:"away_match"` Location string `bson:"location"` - Date date.Date `bson:"date"` - Travel Travel `bson:"travel, omitempty"` + Date date.Date `bson:"date, omitempty"` + Travel Travel `bson:"travel"` Orders []Order `bson:"orders"` } -/*func calculateAmountDonated(matchID primitive.ObjectID) (int32, error) { - collection := client.Database("your_db").Collection("orders") - pipeline := []bson.M{ - {"$match": bson.M{"match_id": matchID}}, - {"$group": bson.M{"_id": nil, "totalAmount": bson.M{"$sum": "$amount"}}}, - } - - var result struct { - TotalAmount int32 `bson:"totalAmount"` - } - - err := collection.Aggregate(context.TODO(), pipeline).Decode(&result) - if err != nil { - return 0, err - } - - return result.TotalAmount, nil -}*/ // muss nach jedem update , erstellen gemacht werden , funktion anpassen +// muss nach jedem update , erstellen gemacht werden , funktion anpassen diff --git a/src/highlanderticketing/model/order.go b/src/highlanderticketing/model/order.go index 2a8f016fb170170874ad2e27a82cfcf783df0d69..abffa712c9e6ee9066baf93926b8a95d5f2234e2 100644 --- a/src/highlanderticketing/model/order.go +++ b/src/highlanderticketing/model/order.go @@ -6,7 +6,7 @@ type Order struct { ID primitive.ObjectID `bson:"_id, omitempty"` OrderType OrderType `bson:"order_type"` Amount int32 `bson:"amount"` - User User `bson:"user"` + User User `bson:"user, omitempty"` } type OrderType string diff --git a/src/highlanderticketing/model/travel.go b/src/highlanderticketing/model/travel.go index 6ef64c46a7aec2f55ec163ab3f62d1dcf1d5cb34..c04f21be5a5e522d23babb7ee6ca21c9c7e61a28 100644 --- a/src/highlanderticketing/model/travel.go +++ b/src/highlanderticketing/model/travel.go @@ -1,11 +1,12 @@ package model import ( + "go.mongodb.org/mongo-driver/bson/primitive" "google.golang.org/genproto/googleapis/type/date" ) type Travel struct { - ID uint + ID primitive.ObjectID `bson:"_id, omitempty"` TravelType TravelType InitialSeatAmount int32 AvailableSeatAmount int32 diff --git a/src/highlanderticketing/service/match.go b/src/highlanderticketing/service/match.go index 165ed044759be44a2c4898bb29a1f5c325556b45..454e8093b07a84f7484d5824c89b804785adb711 100644 --- a/src/highlanderticketing/service/match.go +++ b/src/highlanderticketing/service/match.go @@ -13,6 +13,9 @@ import ( func CreateMatch(match *model.Match) error { match.ID = primitive.NewObjectID() + match.Orders = []model.Order{} + match.Travel.ID = primitive.NewObjectID() + match.Travel.Orders = []model.Order{} client, err := db.GetMongoClient() if err != nil { return err diff --git a/src/highlanderticketing/service/order.go b/src/highlanderticketing/service/order.go index 9f8b6aace578b4ba203f9b8ec19007d46e0b5667..c8ac81acc5cc238f3d02e380197553dea3c93c57 100644 --- a/src/highlanderticketing/service/order.go +++ b/src/highlanderticketing/service/order.go @@ -11,13 +11,9 @@ import ( ) // noch testen -func AddMatchOrder(matchID primitive.ObjectID, order model.Order) error { - existingMatch, err := GetMatchByID(matchID) - if existingMatch == nil || err != nil { - return err - } - +func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error { filter := bson.D{primitive.E{Key: "_id", Value: matchID}} + order.ID = primitive.NewObjectID() updater := bson.D{primitive.E{Key: "$push", Value: bson.D{ primitive.E{Key: "orders", Value: order}, @@ -41,23 +37,16 @@ func AddMatchOrder(matchID primitive.ObjectID, order model.Order) error { return nil } -/*func AddTravelOrder(travelID primitive.ObjectID, order model.Order) error { - existingTravel, err := GetTravelByID(travelID) - if existingTravel == nil || err != nil { - return err - } - - filter := bson.D{primitive.E{Key: "_id", Value: travelID}} +func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error { + filter := bson.D{primitive.E{Key: "_id", Value: matchID}} - updater := bson.D{primitive.E{Key: "$push", Value: bson.D{ - primitive.E{Key: "orders", Value: order}, - }}} + updater := bson.M{"$push": bson.M{"travel.orders": order}} client, err := db.GetMongoClient() if err != nil { return err } - collection := client.Database(db.DB).Collection(db.TRAVEL) + collection := client.Database(db.DB).Collection(db.MATCHES) updateResult, err := collection.UpdateOne(context.TODO(), filter, updater) if err != nil { @@ -69,7 +58,7 @@ func AddMatchOrder(matchID primitive.ObjectID, order model.Order) error { } return nil -}*/ +} func UpdateOrder() {