CHANGE: changed API endpoints

This commit is contained in:
2024-09-06 08:50:24 +02:00
parent bc859085b8
commit 68608a995b
5 changed files with 94 additions and 16 deletions

View File

@@ -2,39 +2,47 @@ package main
import (
"arbeitszeitmessung/models"
"database/sql"
"encoding/json"
"errors"
"fmt"
"log"
"net/http"
"os"
"strconv"
_ "github.com/lib/pq"
)
var DB *sql.DB
func main() {
var err error
DB, err = OpenDatabase()
models.DB, err = OpenDatabase()
if err != nil {
log.Fatal(err)
}
defer DB.Close()
defer models.DB.Close()
http.HandleFunc("/time/new", timeCreateHandler)
http.HandleFunc("/time", timeHandler)
fmt.Println("Server is running at http://localhost:8080")
fmt.Printf("Server is running at http://localhost:8080 exposed to port %s\n", getEnv("EXPOSED_PORT", "8000"))
log.Fatal(http.ListenAndServe(":8080", nil))
}
func timeCreateHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "PUT":
createBooking(w, r)
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
}
func timeHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "PUT":
createBooking(w, r)
case "GET":
getBookings(w, r)
case "PUT":
updateBooking(w, r)
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
@@ -43,7 +51,7 @@ func timeHandler(w http.ResponseWriter, r *http.Request) {
func createBooking(w http.ResponseWriter, r *http.Request) {
booking := (*models.Booking).FromUrlParams(nil, r.URL.Query())
if booking.Verify() {
err := booking.Insert(DB)
err := booking.Insert()
if errors.Is(models.SameBookingError{}, err) {
http.Error(w, "Booking already exists", http.StatusConflict)
return
@@ -61,7 +69,7 @@ func createBooking(w http.ResponseWriter, r *http.Request) {
func getBookings(w http.ResponseWriter, r *http.Request) {
card_id := r.URL.Query().Get("cardID")
bookings, err := GetBookingsByCardID(DB, card_id)
bookings, err := (*models.Booking).GetBookingsByCardID(nil, card_id)
if err != nil {
log.Println("Error getting bookings: ", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
@@ -69,7 +77,42 @@ func getBookings(w http.ResponseWriter, r *http.Request) {
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(bookings)
}
func updateBooking(w http.ResponseWriter, r *http.Request) {
_booking_id := r.URL.Query().Get("bookingID")
if _booking_id == "" {
http.Error(w, "Missing bookingID query parameter", http.StatusBadRequest)
return
}
booking_id, err := strconv.Atoi(_booking_id)
if err != nil {
http.Error(w, "Invalid bookingID query parameter", http.StatusBadRequest)
return
}
booking, err := (*models.Booking).GetBookingById(nil, booking_id)
if err != nil {
log.Println("Error getting booking: ", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
if card_id := r.URL.Query().Get("cardID"); card_id != "" {
booking.CardID = card_id
}
if reader_id := r.URL.Query().Get("readerID"); reader_id != "" {
booking.ReaderID = reader_id
}
if _booking_type := r.URL.Query().Get("bookingType"); _booking_type != "" {
booking_type, err := strconv.Atoi(_booking_type)
if err != nil {
http.Error(w, "Invalid booking_type query parameter", http.StatusInternalServerError)
return
}
booking.BookingType = booking_type
}
booking.Save()
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(booking)
}
// func getBooking(w http.ResponseWriter, r *http.Request)

View File

@@ -2,4 +2,4 @@ POSTGRES_USER=arbeit_zeit
POSTGRES_PASSWORD=password
POSTGRES_PATH=./database
POSTGRES_DB=arbeitszeitmessung
# EXPOSED_PORT=8080
EXPOSED_PORT=8000

View File

@@ -0,0 +1,35 @@
name: arbeitszeitmessung-dev
services:
db:
image: postgres:16
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
PGDATA: /var/lib/postgresql/data/pg_data
volumes:
- ${POSTGRES_PATH}:/var/lib/postgresql/data
ports:
- 5432:5432
adminer:
image: adminer
restart: unless-stopped
ports:
- 8001:8080
backend:
build: ../Backend
image: git.letsstein.de/tom/arbeitszeit-backend
env_file:
- .env
environment:
POSTGRES_HOST: db
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASS: ${POSTGRES_PASSWORD}
EXPOSED_PORT: ${EXPOSED_PORT}
ports:
- 8000:8080

View File

@@ -12,16 +12,14 @@ services:
PGDATA: /var/lib/postgresql/data/pg_data
volumes:
- ${POSTGRES_PATH}:/var/lib/postgresql/data
ports:
- 5432:5432
adminer:
image: adminer
restart: unless-stopped
ports:
- 8000:8080
backend:
build: ../Backend
image: git.letsstein.de/tom/arbeitszeit-backend
env_file:
- .env
@@ -30,5 +28,6 @@ services:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASS: ${POSTGRES_PASSWORD}
EXPOSED_PORT: ${EXPOSED_PORT}
ports:
- 8001:8080
- ${EXPOSED_PORT}:8080

3
db.sql
View File

@@ -8,7 +8,8 @@ CREATE TABLE zeiten (
);
-- @block insert data
INSERT INTO zeiten (card_id, reader_id, booking_type)
VALUES ('test_card', 'test_reader', '2');
VALUES ('test_card', 'test_reader', '2')
RETURNING id, logged_time;
-- @block select
SELECT *
FROM zeiten;