package models import ( "database/sql" "fmt" "log" ) type Booking struct { CradID string `json:"cradID"` ReaderID string `json:"readerID"` BookingType int `json:"bookingTyp"` } type SameBookingError struct{} func (e SameBookingError) Error() string { return "the same booking already exists!" } func VerifyBooking(b Booking) bool { if b.CradID == "" || b.ReaderID == "" || b.BookingType == 0 { return false } return true } func InsertBooking(b Booking, db *sql.DB) error { if !checkLastBooking(b, db) { return fmt.Errorf("the same booking already exists") } stmt, err := db.Prepare((`INSERT INTO zeiten (card_id, reader_id, booking_type) VALUES ($1, $2, $3)`)) if err != nil { return err } _, err = stmt.Query(b.CradID, b.ReaderID, b.BookingType) if err != nil { return err } return nil } func checkLastBooking(b Booking, db *sql.DB) bool { var booking_type int stmt, err := db.Prepare((`SELECT booking_type FROM "zeiten" WHERE "card_id" = $1 ORDER BY "logged_time" DESC LIMIT 1;`)) if err != nil { log.Fatalf("Error preparing query: %v", err) return false } err = stmt.QueryRow(b.CradID).Scan(&booking_type) if err == sql.ErrNoRows { return true } if err!= nil { log.Println("Error checking last booking: ", err) return false } if booking_type == b.BookingType { return false } return true }