Added Database Logic to Reserve, Abort, Release and Confirm
This commit is contained in:
parent
1f9fea0bb6
commit
dd8d914b33
|
|
@ -25,6 +25,8 @@ type DatabaseReader struct {
|
||||||
DatabaseWriter
|
DatabaseWriter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UUID string
|
||||||
|
|
||||||
func NewDatabaseReader(connectionString string) *DatabaseReader {
|
func NewDatabaseReader(connectionString string) *DatabaseReader {
|
||||||
return &DatabaseReader{*NewDatabaseWriter(connectionString)}
|
return &DatabaseReader{*NewDatabaseWriter(connectionString)}
|
||||||
}
|
}
|
||||||
|
|
@ -82,11 +84,11 @@ func (d *DatabaseWriter) createDeliveryTableIfNotExist() error {
|
||||||
func (d *DatabaseWriter) createReservationTableIfNotExist() error {
|
func (d *DatabaseWriter) createReservationTableIfNotExist() error {
|
||||||
_, err := d.db.Exec(`
|
_, err := d.db.Exec(`
|
||||||
CREATE TABLE IF NOT EXISTS reservations (
|
CREATE TABLE IF NOT EXISTS reservations (
|
||||||
id CHAR(36) PRIMARY KEY,
|
id CHAR(36) PRIMARY KEY DEFAULT UUID(),
|
||||||
deliveryId INT,
|
deliveryId INT,
|
||||||
warehouseId INT,
|
warehouseId INT,
|
||||||
amount INT DEFAULT 0,
|
amount INT DEFAULT 0,
|
||||||
status VARCHAR(30) CHECK(status IN ('RESERVED', 'CONFIRMED', 'ABORTED')),
|
status VARCHAR(30) CHECK(status IN ('RESERVED', 'CONFIRMED', 'ABORTED', 'RELEASED')),
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
CONSTRAINT fk_delivery_id
|
CONSTRAINT fk_delivery_id
|
||||||
FOREIGN KEY (deliveryId) REFERENCES deliverytimes (id)
|
FOREIGN KEY (deliveryId) REFERENCES deliverytimes (id)
|
||||||
|
|
@ -118,6 +120,11 @@ func NewDatabaseWriter(connectionString string) *DatabaseWriter {
|
||||||
fmt.Printf("Delivery-Tabellen-Erstellung fehlgeschlagen. %s", err)
|
fmt.Printf("Delivery-Tabellen-Erstellung fehlgeschlagen. %s", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
err = db.createReservationTableIfNotExist()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Reservations-Tabellen-Erstellung fehlgeschlagen. %s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
return &db
|
return &db
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -171,10 +178,10 @@ func (d *DatabaseReader) GetProductByProductIdDeliveryCountryAndState(prod_id, d
|
||||||
`
|
`
|
||||||
|
|
||||||
rows, err := d.db.Query(stmt, prod_id, delivery_country, delivery_country_state)
|
rows, err := d.db.Query(stmt, prod_id, delivery_country, delivery_country_state)
|
||||||
defer rows.Close()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
var products []ProductDelivery
|
var products []ProductDelivery
|
||||||
|
|
||||||
|
|
@ -189,6 +196,51 @@ func (d *DatabaseReader) GetProductByProductIdDeliveryCountryAndState(prod_id, d
|
||||||
return products, nil
|
return products, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DatabaseReader) GetReservationStateById(productId UUID) (string, error) {
|
||||||
|
stmt := `
|
||||||
|
SELECT status FROM reservations WHERE id = ?
|
||||||
|
`
|
||||||
|
row, err := d.db.Query(stmt, productId)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer row.Close()
|
||||||
|
row.Next()
|
||||||
|
var status string
|
||||||
|
err = row.Scan(&status)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return status, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DatabaseWriter) updateReservationState(productId UUID, status string) error {
|
||||||
|
_, err := d.db.Exec("UPDATE reservations SET Status=? WHERE id=?", status, productId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DatabaseWriter) AbortReservation(productId UUID) error {
|
||||||
|
return d.updateReservationState(productId, "ABORTED")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DatabaseWriter) ConfirmReservation(productId UUID) error {
|
||||||
|
return d.updateReservationState(productId, "CONFIRMED")
|
||||||
|
}
|
||||||
|
func (d *DatabaseWriter) ReleaseReservation(productId UUID) error {
|
||||||
|
return d.updateReservationState(productId, "RELEASED")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DatabaseWriter) ReserveReservation(deliveryId, warehouseId, amount int) error {
|
||||||
|
_, err := d.db.Exec("INSERT INTO reservations (deliveryId, warehouseId, amount, status) VALUES (?,?,?,'RESERVED')")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (db *DatabaseWriter) HandleData(ctx context.Context, data eliofile.CountryCsvData) error {
|
func (db *DatabaseWriter) HandleData(ctx context.Context, data eliofile.CountryCsvData) error {
|
||||||
// a.log.Info("HandleData")
|
// a.log.Info("HandleData")
|
||||||
if strings.Contains(strings.Join(data.Data, ","), "product_id") || strings.Contains(strings.Join(data.Data, ","), "delivery_time") {
|
if strings.Contains(strings.Join(data.Data, ","), "product_id") || strings.Contains(strings.Join(data.Data, ","), "delivery_time") {
|
||||||
|
|
@ -204,7 +256,10 @@ func (db *DatabaseWriter) HandleData(ctx context.Context, data eliofile.CountryC
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
db.UpdateOrInsertWarehouseProduct(data.CountryID, menge[0], amount)
|
err = db.UpdateOrInsertWarehouseProduct(data.CountryID, menge[0], amount)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case "delivery":
|
case "delivery":
|
||||||
{
|
{
|
||||||
|
|
@ -214,9 +269,11 @@ func (db *DatabaseWriter) HandleData(ctx context.Context, data eliofile.CountryC
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
db.UpdateOrInsertDelivery(data.CountryID, menge[0], menge[1], amount)
|
err = db.UpdateOrInsertDelivery(data.CountryID, menge[0], menge[1], amount)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue