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 ( import (
"arbeitszeitmessung/models" "arbeitszeitmessung/models"
"database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
"os" "os"
"strconv"
_ "github.com/lib/pq" _ "github.com/lib/pq"
) )
var DB *sql.DB
func main() { func main() {
var err error var err error
DB, err = OpenDatabase() models.DB, err = OpenDatabase()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
defer DB.Close() defer models.DB.Close()
http.HandleFunc("/time/new", timeCreateHandler)
http.HandleFunc("/time", timeHandler) 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)) 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) { func timeHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method { switch r.Method {
case "PUT":
createBooking(w, r)
case "GET": case "GET":
getBookings(w, r) getBookings(w, r)
case "PUT":
updateBooking(w, r)
default: default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) 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) { func createBooking(w http.ResponseWriter, r *http.Request) {
booking := (*models.Booking).FromUrlParams(nil, r.URL.Query()) booking := (*models.Booking).FromUrlParams(nil, r.URL.Query())
if booking.Verify() { if booking.Verify() {
err := booking.Insert(DB) err := booking.Insert()
if errors.Is(models.SameBookingError{}, err) { if errors.Is(models.SameBookingError{}, err) {
http.Error(w, "Booking already exists", http.StatusConflict) http.Error(w, "Booking already exists", http.StatusConflict)
return return
@@ -61,7 +69,7 @@ func createBooking(w http.ResponseWriter, r *http.Request) {
func getBookings(w http.ResponseWriter, r *http.Request) { func getBookings(w http.ResponseWriter, r *http.Request) {
card_id := r.URL.Query().Get("cardID") card_id := r.URL.Query().Get("cardID")
bookings, err := GetBookingsByCardID(DB, card_id) bookings, err := (*models.Booking).GetBookingsByCardID(nil, card_id)
if err != nil { if err != nil {
log.Println("Error getting bookings: ", err) log.Println("Error getting bookings: ", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError) 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") w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(bookings) 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) // func getBooking(w http.ResponseWriter, r *http.Request)

View File

@@ -2,4 +2,4 @@ POSTGRES_USER=arbeit_zeit
POSTGRES_PASSWORD=password POSTGRES_PASSWORD=password
POSTGRES_PATH=./database POSTGRES_PATH=./database
POSTGRES_DB=arbeitszeitmessung 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 PGDATA: /var/lib/postgresql/data/pg_data
volumes: volumes:
- ${POSTGRES_PATH}:/var/lib/postgresql/data - ${POSTGRES_PATH}:/var/lib/postgresql/data
ports:
- 5432:5432
adminer: adminer:
image: adminer image: adminer
restart: unless-stopped restart: unless-stopped
ports: ports:
- 8000:8080 - 8000:8080
backend: backend:
build: ../Backend
image: git.letsstein.de/tom/arbeitszeit-backend image: git.letsstein.de/tom/arbeitszeit-backend
env_file: env_file:
- .env - .env
@@ -30,5 +28,6 @@ services:
POSTGRES_DB: ${POSTGRES_DB} POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER} POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASS: ${POSTGRES_PASSWORD} POSTGRES_PASS: ${POSTGRES_PASSWORD}
EXPOSED_PORT: ${EXPOSED_PORT}
ports: ports:
- 8001:8080 - ${EXPOSED_PORT}:8080

3
db.sql
View File

@@ -8,7 +8,8 @@ CREATE TABLE zeiten (
); );
-- @block insert data -- @block insert data
INSERT INTO zeiten (card_id, reader_id, booking_type) 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 -- @block select
SELECT * SELECT *
FROM zeiten; FROM zeiten;