Compare commits

...

2 Commits

Author SHA1 Message Date
Valentijn van der Jagt
87cfe02231 whitespace 2026-03-09 15:42:39 +01:00
Valentijn van der Jagt
bb7d81952c simple parcel service finder 2026-03-09 15:38:12 +01:00

102
main.go
View File

@@ -14,89 +14,25 @@ In this project i play around with go. This is my first time writing go, and im
import ( import (
"database/sql" "database/sql"
"log" "log"
"errors"
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
) )
func executeQuery(db *sql.DB, query string) {
_, err := db.Exec(query) func findParcelProvider(code string, postal_code string)(string, error){
if err != nil { providers := [4]string{"express", "parcel-nl", "ecommerce", "ecommerce-europe"}
log.Printf("%q: %s\n", err, query) for _, v := range providers {
return // do http api reqiest
success := false
if (success){
return v, nil
} }
}
return "", errors.New("parcel not found!")
} }
func createTables(db *sql.DB) {
executeQuery(db, `
CREATE TABLE shipments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tracking_number TEXT NOT NULL UNIQUE,
service TEXT NOT NULL,
sender_name TEXT,
receiver_name TEXT,
origin_country TEXT,
origin_city TEXT,
origin_postal TEXT,
origin_address TEXT,
destination_country TEXT,
destination_city TEXT,
destination_postal TEXT,
destination_address TEXT,
pickup_date TEXT,
estimated_delivery_from TEXT,
estimated_delivery_to TEXT,
current_status TEXT,
last_update TEXT DEFAULT (datetime('now')),
created_at TEXT DEFAULT (datetime('now'))
);
-- Status Events: history of status updates
CREATE TABLE shipment_events (
id INTEGER PRIMARY KEY,
shipment_id INTEGER NOT NULL,
event_time TEXT NOT NULL,
status_code TEXT NOT NULL,
status_desc TEXT,
description TEXT,
remark TEXT,
next_steps TEXT,
location_country TEXT,
location_city TEXT,
location_postal TEXT,
FOREIGN KEY (shipment_id) REFERENCES shipments(id)
);
CREATE INDEX idx_events_shipment_time ON shipment_events(shipment_id, event_time);
CREATE TABLE shipment_updates (
id INTEGER PRIMARY KEY,
shipment_id INTEGER NOT NULL,
update_time TEXT DEFAULT (datetime('now')),
service TEXT,
location_country TEXT,
location_city TEXT,
status_code TEXT,
status_desc TEXT,
estimated_from TEXT,
estimated_to TEXT,
FOREIGN KEY (shipment_id) REFERENCES shipments(id)
);
CREATE INDEX idx_updates_shipment_time ON shipment_updates(shipment_id, update_time);
`)
log.Printf("[Database] tables created")
}
func dropTables(db *sql.DB) {
executeQuery(db, `
DROP TABLE IF EXISTS shipments;
DROP TABLE IF EXISTS shipment_events;
DROP TABLE IF EXISTS shipment_updates;
`)
log.Printf("[Database] tables dropped")
}
func main() { func main() {
db, err := sql.Open("sqlite", "./dhl.db") db, err := sql.Open("sqlite", "./dhl.db")
@@ -105,6 +41,16 @@ func main() {
} }
defer db.Close() defer db.Close()
dropTables(db) // temporarely for debugging code := "blablbla"
createTables(db) postal := "1234ab"
provider, err := findParcelProvider(code, postal)
if (err != nil){
log.Fatal(err)
}
log.Printf("Code: %s, Postal Code: %s, Tracking Service: %s", code, postal, provider)
} }