diff --git a/src/highlanderticketing/api/match.go b/src/highlanderticketing/api/match.go index 1e5837ea539ef1cfd6c1f620b6be237fc7a7f8d5..a39674a0b7a954f06f52eb7ad4619e1b23be17e2 100644 --- a/src/highlanderticketing/api/match.go +++ b/src/highlanderticketing/api/match.go @@ -10,11 +10,14 @@ import ( "gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model" ) -func GetMatchesOfApi(apiUrl string) []*model.Match { +func GetMatchesOfApi(apiUrl string) (error, []*model.Match) { data := getData(apiUrl) - fmt.Println(data) - matches := formatJsonToMatches(data) - return matches + err, matches := formatJsonCreateMatch(data) + if err != nil { + return err, make([]*model.Match, 0) + } + fmt.Println(matches) + return nil, matches } func getData(apiUrl string) []byte { @@ -40,20 +43,21 @@ func getData(apiUrl string) []byte { return responseBody } -func formatJsonToMatches(jsonArray []byte) []*model.Match { - var match *model.Match +func formatJsonCreateMatch(jsonArray []byte) (error, []*model.Match) { + var match model.Match var matches []*model.Match var results []map[string]interface{} json.Unmarshal([]byte(jsonArray), &results) for _, result := range results { - fmt.Println(result, "result") match.ExternalID = int64(result["matchID"].(float64)) - fmt.Println(match.ExternalID) match.LeagueName = result["leagueName"].(string) - match.Date = result["matchDateTime"].(time.Time) - fmt.Println(*match) + matchDate, err := time.Parse("2006-01-02T15:04:05", result["matchDateTime"].(string)) + if err != nil { + return err, matches + } + match.Date = matchDate if team1, ok := result["team1"].(map[string]interface{}); ok { if name, ok := team1["shortName"].(string); ok { @@ -78,8 +82,7 @@ func formatJsonToMatches(jsonArray []byte) []*model.Match { } } } - fmt.Println(&matches) - matches = append(matches, match) + matches = append(matches, &match) } - return matches + return nil, matches } diff --git a/src/highlanderticketing/handler/match.go b/src/highlanderticketing/handler/match.go index fca1daa84d99f0968f15b9c8f7db7c4e3b9e839d..cc410d9a335caf08dd7f4a306c1ea2175eb94717 100644 --- a/src/highlanderticketing/handler/match.go +++ b/src/highlanderticketing/handler/match.go @@ -117,6 +117,32 @@ func DeleteMatch(w http.ResponseWriter, r *http.Request) { sendJson(w, result{Success: "OK"}) } +func UpdateTickets(w http.ResponseWriter, r *http.Request) { + if err := CheckAccessToken(w, r, true); err != nil { + log.Errorf("Eror checking AccessToken: %v", err) + http.Error(w, err.Error(), http.StatusUnauthorized) + return + } + id, err := getID(r) + if err != nil { + log.Errorf("Please parse in ID at the url %v", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + MatchToUpdate, err := getMatch(r) + if err != nil { + log.Errorf("Match not found %v", err) + return + } + MatchUpdated, err := service.UpdateTickets(id, MatchToUpdate) + if err != nil { + log.Errorf("Match could not be updated %v", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, MatchUpdated) +} + // nur intern func DeleteAllMatches(w http.ResponseWriter, r *http.Request) { err := service.DeleteAllMatches() diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go index d63e2b4146a0f2b026171f1759af55f5b8f62c00..022540d79c6272ed7fe3c90c4fd270ac2591663a 100644 --- a/src/highlanderticketing/main.go +++ b/src/highlanderticketing/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "net/http" "os" @@ -17,12 +16,18 @@ import ( func main() { /*service.DeleteAllUsers() - var userArray []model.User - userArray, _ = service.GetAllUsers() - fmt.Println(userArray)*/ + var userArray []model.User + userArray, _ = service.GetAllUsers() + fmt.Println(userArray) + */ service.DeleteAllMatches() - matches := api.GetMatchesOfApi("https://api.openligadb.de/getmatchesbyteamid/16/10/0") - fmt.Println(&matches) + errMatches, matches := api.GetMatchesOfApi("https://api.openligadb.de/getmatchesbyteamid/16/10/0") + if errMatches != nil { + return + } + for _, match := range matches { + service.CreateMatch(match) + } if err := godotenv.Load(".env"); err != nil { log.Fatalf("Error loading .env file") @@ -52,6 +57,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}/updatetickets", handler.UpdateTickets).Methods("PUT") router.HandleFunc("/match/{id}/matchorder", handler.AddMatchOrder).Methods("POST") router.HandleFunc("/match/{id}/cancelorder/{orderid}", handler.CancelOrder).Methods("PUT") if err := http.ListenAndServe(":8000", router); err != nil { diff --git a/src/highlanderticketing/model/match.go b/src/highlanderticketing/model/match.go index 77b797546501e96cf5ef9d13610f1449a8c69336..772ae0b469d605aeffe91907d14a7afd1c0649bb 100644 --- a/src/highlanderticketing/model/match.go +++ b/src/highlanderticketing/model/match.go @@ -9,6 +9,7 @@ import ( type Match struct { ID primitive.ObjectID `bson:"_id, omitempty"` ExternalID int64 `bson:"externalID"` + Price int32 `bson:"price, omitempty"` InitialTicketAmount int32 `bson:"initial_ticket_amount"` AvailableTicketAmount int32 `bson:"available_ticket_amount"` Opponenent string `bson:"opponent"` @@ -19,5 +20,3 @@ type Match struct { OrderAmount int32 `bson:"orderamount"` Orders []Order `bson:"orders"` } - -// muss nach jedem update , erstellen gemacht werden , funktion anpassen diff --git a/src/highlanderticketing/service/match.go b/src/highlanderticketing/service/match.go index 533a6e66f6618d5682f8a057eed8689ba0c372ab..42fbca4a82e82d4fde4a648625fc611ffba9357b 100644 --- a/src/highlanderticketing/service/match.go +++ b/src/highlanderticketing/service/match.go @@ -29,19 +29,61 @@ func CreateMatch(match *model.Match) error { func UpdateMatch(matchID primitive.ObjectID, match *model.Match) (*model.Match, error) { result := model.Match{} - existingMatch, err := GetMatchByID(matchID) - if existingMatch == nil || err != nil { - return existingMatch, err - } filter := bson.D{primitive.E{Key: "_id", Value: matchID}} updater := bson.D{primitive.E{Key: "$set", Value: bson.D{ primitive.E{Key: "initial_ticket_amount", Value: match.InitialTicketAmount}, + primitive.E{Key: "external_id", Value: match.ExternalID}, + primitive.E{Key: "price", Value: match.Price}, + primitive.E{Key: "opponent", Value: match.Opponenent}, + primitive.E{Key: "league_name", Value: match.LeagueName}, primitive.E{Key: "available_ticket_amount", Value: match.AvailableTicketAmount}, primitive.E{Key: "away_match", Value: match.AwayMatch}, primitive.E{Key: "location", Value: match.Location}, - //primitive.E{Key: "date", Value: match.Date}, + primitive.E{Key: "date", Value: match.Date}, + }}} + + client, err := db.GetMongoClient() + if err != nil { + return nil, err + } + collection := client.Database(db.DB).Collection(db.MATCHES) + + updateResult, err := collection.UpdateOne(context.TODO(), filter, updater) + if err != nil { + return nil, err + } + + if updateResult.ModifiedCount == 0 { + return nil, fmt.Errorf("no document was updated") + } + + err = collection.FindOne(context.TODO(), filter).Decode(&result) + if err != nil { + return nil, err + } + + return &result, nil +} + +func UpdateTickets(matchID primitive.ObjectID, match *model.Match) (*model.Match, error) { + result := model.Match{} + filter := bson.D{primitive.E{Key: "_id", Value: matchID}} + + existingmatch, err := GetMatchByID(matchID) + if err != nil { + fmt.Println(existingmatch, "existingmatch") + return &result, err + } + + match.AvailableTicketAmount = existingmatch.AvailableTicketAmount + match.InitialTicketAmount + match.InitialTicketAmount = existingmatch.InitialTicketAmount + match.InitialTicketAmount + + updater := bson.D{primitive.E{Key: "$set", Value: bson.D{ + primitive.E{Key: "initial_ticket_amount", Value: match.InitialTicketAmount}, + primitive.E{Key: "price", Value: match.Price}, + primitive.E{Key: "available_ticket_amount", Value: match.AvailableTicketAmount}, }}} client, err := db.GetMongoClient()