ADD: first api route get bookings
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"arbeitszeitmessung/models"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
@@ -14,3 +15,30 @@ func OpenDatabase() (*sql.DB, error){
|
|||||||
connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable", dbUser, dbPassword, dbHost, dbName)
|
connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable", dbUser, dbPassword, dbHost, dbName)
|
||||||
return sql.Open("postgres", connStr)
|
return sql.Open("postgres", connStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetBookingsByCardID(db *sql.DB, card_id string) ([]models.Booking, error) {
|
||||||
|
qStr, err := db.Prepare((`SELECT * FROM zeiten WHERE card_id = $1`))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var bookings []models.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 models.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
|
||||||
|
}
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ func timeHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
switch r.Method {
|
switch r.Method {
|
||||||
case "PUT":
|
case "PUT":
|
||||||
createBooking(w, r)
|
createBooking(w, r)
|
||||||
|
case "GET":
|
||||||
|
getBookings(w, r)
|
||||||
default:
|
default:
|
||||||
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
||||||
}
|
}
|
||||||
@@ -57,6 +59,21 @@ func createBooking(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getBookings(w http.ResponseWriter, r *http.Request) {
|
||||||
|
card_id := r.URL.Query().Get("cardID")
|
||||||
|
bookings, err := GetBookingsByCardID(DB, card_id)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error getting bookings: ", err)
|
||||||
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(bookings)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// func getBooking(w http.ResponseWriter, r *http.Request)
|
||||||
|
|
||||||
func getEnv(key, fallback string) string {
|
func getEnv(key, fallback string) string {
|
||||||
if value, ok := os.LookupEnv(key); ok {
|
if value, ok := os.LookupEnv(key); ok {
|
||||||
return value
|
return value
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SameBookingError struct{}
|
type SameBookingError struct{}
|
||||||
@@ -17,6 +18,8 @@ type Booking struct {
|
|||||||
CardID string `json:"cradID"`
|
CardID string `json:"cradID"`
|
||||||
ReaderID string `json:"readerID"`
|
ReaderID string `json:"readerID"`
|
||||||
BookingType int `json:"bookingTyp"`
|
BookingType int `json:"bookingTyp"`
|
||||||
|
LoggedTime time.Time `json:"loggedTime"`
|
||||||
|
Id int `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user