From 1e967674b68e34fa06cd1b2fe924f4db9076c152 Mon Sep 17 00:00:00 2001 From: The Magician Date: Thu, 12 Sep 2024 13:37:41 +0100 Subject: [PATCH] Add the ability to remove cards --- sevenkeys/database/remove.go | 50 +++++++++++++++++++++++++++++++ sevenkeys/database/storagearea.go | 17 +++++++++++ sevenkeys/logic/remove.go | 27 +++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 sevenkeys/database/remove.go create mode 100644 sevenkeys/logic/remove.go diff --git a/sevenkeys/database/remove.go b/sevenkeys/database/remove.go new file mode 100644 index 0000000..38c558b --- /dev/null +++ b/sevenkeys/database/remove.go @@ -0,0 +1,50 @@ +package database + +import "database/sql" + +func RemoveFromBinder(db *sql.DB, location CardLocation) error { + query := `UPDATE CardStorageLocation SET CardPrintingId = NULL WHERE Id = ?;` + + update, err := db.Prepare(query) + defer update.Close() + if err != nil { + return err + } + + _, err = update.Exec(location.Id) + if err != nil { + return err + } + + return nil +} + +func RemoveFromBox(db *sql.DB, location CardLocation) error { + deleteQuery := `DELETE FROM CardStorageLocation WHERE Id = ?;` + + del, err := db.Prepare(deleteQuery) + defer del.Close() + if err != nil { + return err + } + + _, err = del.Exec(location.Id) + if err != nil { + return err + } + + updateQuery := `UPDATE CardStorageLocation SET Position = Position - 1 WHERE Position > 5;` + + update, err := db.Prepare(updateQuery) + defer update.Close() + if err != nil { + return err + } + + _, err = update.Exec(location.Id) + if err != nil { + return err + } + + return nil +} diff --git a/sevenkeys/database/storagearea.go b/sevenkeys/database/storagearea.go index 0148a75..d916fb2 100644 --- a/sevenkeys/database/storagearea.go +++ b/sevenkeys/database/storagearea.go @@ -2,6 +2,9 @@ package database import "database/sql" +var StorageAreaTypeBinder string = "Binder" +var StorageAreaTypeBox string = "Box" + type StorageArea struct { Id int Name string @@ -46,3 +49,17 @@ func InsertStorageArea(db *sql.DB, storageArea StorageArea) error { return nil } + +func GetStorageAreaTypeById(db *sql.DB, storageAreaId int) (string, error) { + var storageType string + + query := `SELECT StorageType FROM StorageArea WHERE Id = ?;` + row := db.QueryRow(query, storageAreaId) + + err := row.Scan(&storageType) + if err != nil { + return storageType, err + } + + return storageType, nil +} diff --git a/sevenkeys/logic/remove.go b/sevenkeys/logic/remove.go new file mode 100644 index 0000000..4919c2b --- /dev/null +++ b/sevenkeys/logic/remove.go @@ -0,0 +1,27 @@ +package logic + +import ( + "database/sql" + "errors" + + "sevenkeys/database" +) + +var UnrecognizedStorageAreaTypeError error = errors.New("Unrecognized storage area type.") + +func RemoveFromStorage(db *sql.DB, location database.CardLocation) error { + locationType, err := database.GetStorageAreaTypeById(db, location.Id) + if err != nil { + return err + } + + if locationType == database.StorageAreaTypeBinder { + database.RemoveFromBinder(db, location) + } else if locationType == database.StorageAreaTypeBox { + database.RemoveFromBox(db, location) + } else { + return UnrecognizedStorageAreaTypeError + } + + return nil +}