2024-04-05 13:23:48 +02:00
package router
import (
"context"
"encoding/json"
"gibb165lb2/util"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
2024-04-05 20:30:39 +02:00
"go.mongodb.org/mongo-driver/mongo"
2024-04-05 13:23:48 +02:00
"log"
"math/rand"
"net/http"
"time"
)
2024-04-05 20:30:39 +02:00
// GetLaeden curl -X GET localhost:3000/laeden
2024-04-05 13:23:48 +02:00
func GetLaeden ( w http . ResponseWriter , r * http . Request ) {
// MongoDB-Datenbank und -Sammlung auswählen
db := util . Client . Database ( "meineDatenbank" )
laedenCollection := db . Collection ( "spielelaeden" )
// Läden aus der Datenbank abrufen
var laeden [ ] util . Spieleladen
cursor , err := laedenCollection . Find ( context . Background ( ) , bson . M { } )
if err != nil {
log . Fatal ( err )
}
2024-04-05 20:30:39 +02:00
defer func ( cursor * mongo . Cursor , ctx context . Context ) {
err := cursor . Close ( ctx )
if err != nil {
}
} ( cursor , context . Background ( ) )
2024-04-05 13:23:48 +02:00
for cursor . Next ( context . Background ( ) ) {
var laden util . Spieleladen
if err := cursor . Decode ( & laden ) ; err != nil {
log . Fatal ( err )
}
laeden = append ( laeden , laden )
}
if err := cursor . Err ( ) ; err != nil {
log . Fatal ( err )
}
// Läden als JSON zurücksenden
w . Header ( ) . Set ( "Content-Type" , "application/json" )
2024-04-05 20:30:39 +02:00
if err := json . NewEncoder ( w ) . Encode ( laeden ) ; err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
2024-04-05 13:23:48 +02:00
}
2024-04-05 20:30:39 +02:00
// InitDatabase curl -X POST localhost:3000/initDatabase
2024-04-05 13:23:48 +02:00
func InitDatabase ( w http . ResponseWriter , r * http . Request ) {
// MongoDB-Datenbank und -Sammlungen auswählen
db := util . Client . Database ( "meineDatenbank" )
spieleCollection := db . Collection ( "spiele" )
laedenCollection := db . Collection ( "spielelaeden" )
// Musterdaten für Läden und Spiele erstellen
laeden := [ ] util . Spieleladen {
{ Name : "GameZone" , Adresse : "123 Main Street" , Telefonnummer : "555-1234" } ,
{ Name : "Gamer's Haven" , Adresse : "456 Elm Street" , Telefonnummer : "555-5678" } ,
{ Name : "TechZone" , Adresse : "789 Oak Avenue" , Telefonnummer : "555-9012" } ,
{ Name : "GameStop" , Adresse : "321 Pine Road" , Telefonnummer : "555-3456" } ,
{ Name : "Pixel Palace" , Adresse : "555 Maple Lane" , Telefonnummer : "555-7890" } ,
}
spiele := [ ] util . Spiel {
{ Titel : "Red Dead Redemption 2" , Erscheinungsdatum : time . Date ( 2018 , 10 , 26 , 0 , 0 , 0 , 0 , time . UTC ) , Publisher : "Rockstar Games" , Genre : "Action-Adventure" , Plattform : "PlayStation 4" , Bewertung : 10 } ,
{ Titel : "The Legend of Zelda: Breath of the Wild" , Erscheinungsdatum : time . Date ( 2017 , 3 , 3 , 0 , 0 , 0 , 0 , time . UTC ) , Publisher : "Nintendo" , Genre : "Action-Adventure" , Plattform : "Nintendo Switch" , Bewertung : 10 } ,
{ Titel : "God of War" , Erscheinungsdatum : time . Date ( 2018 , 4 , 20 , 0 , 0 , 0 , 0 , time . UTC ) , Publisher : "Sony Interactive Entertainment" , Genre : "Action-Adventure" , Plattform : "PlayStation 4" , Bewertung : 9 } ,
{ Titel : "The Witcher 3: Wild Hunt" , Erscheinungsdatum : time . Date ( 2015 , 5 , 19 , 0 , 0 , 0 , 0 , time . UTC ) , Publisher : "CD Projekt" , Genre : "Action-RPG" , Plattform : "PlayStation 4" , Bewertung : 9 } ,
}
// Läden in die Datenbank einfügen
var laedenIDs [ ] primitive . ObjectID
for _ , l := range laeden {
result , err := laedenCollection . InsertOne ( context . Background ( ) , l )
if err != nil {
log . Fatal ( err )
}
laedenIDs = append ( laedenIDs , result . InsertedID . ( primitive . ObjectID ) )
}
// Spiele in die Datenbank einfügen
var spieleWithLadenIDs [ ] interface { }
for _ , spiel := range spiele {
// Läden-IDs zum Spiel hinzufügen
2024-04-05 20:30:39 +02:00
var ladenids [ ] primitive . ObjectID
2024-04-05 13:23:48 +02:00
randomIndex1 := rand . Intn ( len ( laedenIDs ) )
ladenids = append ( ladenids , laedenIDs [ randomIndex1 ] )
var randomIndex2 int
for {
randomIndex2 = rand . Intn ( len ( laedenIDs ) )
if randomIndex2 != randomIndex1 {
break
}
}
ladenids = append ( ladenids , laedenIDs [ randomIndex2 ] )
spiel . Laeden = ladenids
// Spiel in bson.M-Format konvertieren
spielBSON := bson . M {
"Laeden" : spiel . Laeden ,
"Titel" : spiel . Titel ,
"Erscheinungsdatum" : spiel . Erscheinungsdatum ,
"Publisher" : spiel . Publisher ,
"Genre" : spiel . Genre ,
"Plattform" : spiel . Plattform ,
"Bewertung" : spiel . Bewertung ,
}
spieleWithLadenIDs = append ( spieleWithLadenIDs , spielBSON )
}
_ , err := spieleCollection . InsertMany ( context . Background ( ) , spieleWithLadenIDs )
if err != nil {
log . Fatal ( err )
}
// Erfolgsmeldung senden
w . WriteHeader ( http . StatusOK )
2024-04-05 20:30:39 +02:00
if _ , err := w . Write ( [ ] byte ( "Datenbank erfolgreich initialisiert" ) ) ; err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
2024-04-05 13:23:48 +02:00
}
2024-04-05 20:30:39 +02:00
// DeleteLaden curl -X DELETE -d '{"laden_id": "YOUR_LADEN_ID"}' -H "Content-Type: application/json" localhost:3000/deleteLaden
2024-04-05 13:23:48 +02:00
func DeleteLaden ( w http . ResponseWriter , r * http . Request ) {
// Parse JSON body
var requestData struct {
LadenID string ` json:"laden_id" `
}
err := json . NewDecoder ( r . Body ) . Decode ( & requestData )
if err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
// Parse LadenID as ObjectID
ladenID , err := primitive . ObjectIDFromHex ( requestData . LadenID )
if err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
// MongoDB-Datenbank und -Sammlungen auswählen
db := util . Client . Database ( "meineDatenbank" )
laedenCollection := db . Collection ( "spielelaeden" )
// Laden aus der Datenbank löschen
_ , err = laedenCollection . DeleteOne ( context . Background ( ) , bson . M { "_id" : ladenID } )
if err != nil {
http . Error ( w , err . Error ( ) , http . StatusInternalServerError )
return
}
// Erfolgsmeldung senden
w . WriteHeader ( http . StatusOK )
2024-04-05 20:30:39 +02:00
if _ , err := w . Write ( [ ] byte ( "Laden erfolgreich gelöscht" ) ) ; err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
2024-04-05 13:23:48 +02:00
}
2024-04-05 20:30:39 +02:00
// AddNewLaden curl -X POST -d '{"name": "Neuer Laden", "adresse": "Neue Adresse", "telefonnummer": "123-456"}' -H "Content-Type: application/json" localhost:3000/addNewLaden
2024-04-05 13:23:48 +02:00
func AddNewLaden ( w http . ResponseWriter , r * http . Request ) {
// Parse JSON body
var newLaden util . Spieleladen
2024-04-05 20:30:39 +02:00
if err := json . NewDecoder ( r . Body ) . Decode ( & newLaden ) ; err != nil {
2024-04-05 13:23:48 +02:00
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
// MongoDB-Datenbank und -Sammlung auswählen
db := util . Client . Database ( "meineDatenbank" )
laedenCollection := db . Collection ( "spielelaeden" )
// Neuen Laden in die Datenbank einfügen
2024-04-05 20:30:39 +02:00
if _ , err := laedenCollection . InsertOne ( context . Background ( ) , newLaden ) ; err != nil {
2024-04-05 13:23:48 +02:00
http . Error ( w , err . Error ( ) , http . StatusInternalServerError )
return
}
// Erfolgsmeldung senden
w . WriteHeader ( http . StatusCreated )
2024-04-05 20:30:39 +02:00
if _ , err := w . Write ( [ ] byte ( "Neuer Laden erfolgreich erstellt" ) ) ; err != nil {
http . Error ( w , err . Error ( ) , http . StatusBadRequest )
return
}
2024-04-05 13:23:48 +02:00
}