CHANGE: moved DB funcitons into bookings added return for create booking
This commit is contained in:
@@ -2,6 +2,7 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -22,6 +23,8 @@ type Booking struct {
|
|||||||
Id int `json:"id"`
|
Id int `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var DB *sql.DB
|
||||||
|
|
||||||
func (b Booking) New(card_id string, reader_id string, booking_type int) Booking {
|
func (b Booking) New(card_id string, reader_id string, booking_type int) Booking {
|
||||||
return Booking{
|
return Booking{
|
||||||
CardID: card_id,
|
CardID: card_id,
|
||||||
@@ -48,24 +51,81 @@ func (b Booking) Verify() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b Booking) Insert(db *sql.DB) error {
|
func (b *Booking) Insert() error {
|
||||||
if !checkLastBooking(b, db) {
|
if !checkLastBooking(*b) {
|
||||||
return SameBookingError{}
|
return SameBookingError{}
|
||||||
}
|
}
|
||||||
stmt, err := db.Prepare((`INSERT INTO zeiten (card_id, reader_id, booking_type) VALUES ($1, $2, $3)`))
|
stmt, err := DB.Prepare((`INSERT INTO zeiten (card_id, reader_id, booking_type) VALUES ($1, $2, $3) RETURNING id, logged_time`))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = stmt.Query(b.CardID, b.ReaderID, b.BookingType)
|
err = stmt.QueryRow(b.CardID, b.ReaderID, b.BookingType).Scan(&b.Id, &b.LoggedTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkLastBooking(b Booking, db *sql.DB) bool {
|
func (b *Booking) GetBookingById(booking_id int) (Booking, error) {
|
||||||
|
var booking Booking
|
||||||
|
qStr, err := DB.Prepare((`SELECT id, logged_time, card_id, reader_id, booking_type FROM zeiten WHERE id = $1`))
|
||||||
|
if err != nil {
|
||||||
|
return booking, err
|
||||||
|
}
|
||||||
|
err = qStr.QueryRow(booking_id).Scan(&booking.Id, &booking.LoggedTime, &booking.CardID, &booking.ReaderID, &booking.BookingType)
|
||||||
|
if err != nil {
|
||||||
|
return booking, err
|
||||||
|
}
|
||||||
|
if !booking.Verify() {
|
||||||
|
fmt.Printf("Booking verification failed")
|
||||||
|
return booking, nil
|
||||||
|
}
|
||||||
|
return booking, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Booking) GetBookingsByCardID(card_id string) ([]Booking, error) {
|
||||||
|
qStr, err := DB.Prepare((`SELECT id, logged_time, card_id, reader_id, booking_type FROM zeiten WHERE card_id = $1`))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var bookings []Booking
|
||||||
|
rows, err := qStr.Query(card_id)
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return bookings, err
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
for rows.Next() {
|
||||||
|
var booking Booking
|
||||||
|
if err := rows.Scan(&booking.Id, &booking.LoggedTime, &booking.CardID, &booking.ReaderID, &booking.BookingType); err != nil {
|
||||||
|
return bookings, err
|
||||||
|
}
|
||||||
|
bookings = append(bookings, booking)
|
||||||
|
}
|
||||||
|
if err = rows.Err(); err != nil {
|
||||||
|
return bookings, err
|
||||||
|
}
|
||||||
|
return bookings, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b Booking) Save() {
|
||||||
|
qStr, err := DB.Prepare((`UPDATE "zeiten" SET "id" = $1, "card_id" = $2, "reader_id" = $3, "booking_type" = $4 WHERE "id" = $1;`))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error preparing query: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = qStr.Query(b.Id, b.CardID, b.ReaderID, b.BookingType)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error executing query: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkLastBooking(b Booking) bool {
|
||||||
var booking_type int
|
var booking_type int
|
||||||
stmt, err := db.Prepare((`SELECT booking_type FROM "zeiten" WHERE "card_id" = $1 ORDER BY "logged_time" DESC LIMIT 1;`))
|
stmt, err := DB.Prepare((`SELECT booking_type FROM "zeiten" WHERE "card_id" = $1 ORDER BY "logged_time" DESC LIMIT 1;`))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error preparing query: %v", err)
|
log.Fatalf("Error preparing query: %v", err)
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user