From 25b39234279ed0cc9abd08f776464b458a339c63 Mon Sep 17 00:00:00 2001 From: tsindt Date: Mon, 14 Sep 2026 21:15:09 +0200 Subject: [PATCH] Property Import --- .vscode/launch.json | 15 + .../propertyTypeGroups copy.json | 214 +++++----- xcpq/buildtime/xcpq_editor/cmd/config.toml | 4 +- .../xcpq_editor/cmd/server/httpServer.go | 39 +- .../xcpq_editor/data/propertyTypeGroups.json | 383 +++++++++++++----- .../internal/handlers/import_handler.go | 24 +- .../xcpq_editor/internal/middleware/.ignore | 0 .../xcpq_editor/internal/models/property.go | 2 +- .../internal/models/property_type.go | 2 +- .../internal/models/property_types_group.go | 2 +- .../xcpq_editor/internal/models/value.go | 2 +- .../repositories/import_repository.go | 6 +- .../repositories/property_repository.go | 14 +- .../repositories/property_type_repository.go | 14 +- .../property_types_group_repository.go | 18 +- .../internal/repositories/value_repository.go | 12 +- .../internal/services/import_service.go | 2 +- xcpq/database/dump-xcpq-202609141431.sql | 329 +++++++++++++++ 18 files changed, 832 insertions(+), 250 deletions(-) create mode 100644 .vscode/launch.json delete mode 100644 xcpq/buildtime/xcpq_editor/internal/middleware/.ignore create mode 100644 xcpq/database/dump-xcpq-202609141431.sql diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..608d3c699 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${fileDirname}" + } + ] +} \ No newline at end of file diff --git a/buildtime/server/examples/household_example/propertyTypeGroups copy.json b/buildtime/server/examples/household_example/propertyTypeGroups copy.json index 018952f79..45f4d9a4c 100644 --- a/buildtime/server/examples/household_example/propertyTypeGroups copy.json +++ b/buildtime/server/examples/household_example/propertyTypeGroups copy.json @@ -1,206 +1,206 @@ [ { - "label": "X-CPQ", + "name": "X-CPQ", "description": "Property Type Group for X-CPQ", - "propertyTypeGroups": [ + "property_type_Groups": [ { - "label": "electrical", + "name": "electrical", "description": "All electrical property types", - "propertyTypes": [ + "property_types": [ { - "label": "Spannungsversorgung (V)", + "name": "Spannungsversorgung (V)", "description": "Spannungsversorgung (V)", "values": [ - 220, - 230 + { "value": 220 }, + { "value": 230 } ] }, { - "label": "Leistung (W)", + "name": "Leistung (W)", "description": "Leistung", "values": [ - 0, - 140, - 130, - 120, - 110, - 100, - 90, - 80, - 70, - 60, - 50, - 28, - 26, - 24, - 22, - 20 + { "value": 0 }, + { "value": 140 }, + { "value": 130 }, + { "value": 120 }, + { "value": 110 }, + { "value": 100 }, + { "value": 90 }, + { "value": 80 }, + { "value": 70 }, + { "value": 60 }, + { "value": 50 }, + { "value": 28 }, + { "value": 26 }, + { "value": 24 }, + { "value": 22 }, + { "value": 20 } ] }, { - "label": "Eingangsimpedanz (Ω)", + "name": "Eingangsimpedanz (Ω)", "description": "Wiederstand der Eingangsimpedanz", "values": [ - 10 + { "value": 10 } ] }, { - "label": "Frequenzbereich (Hz‑kHz)", + "name": "Frequenzbereich (Hz‑kHz)", "description": "Frequenzbereich (Hz‑kHz)", "values": [ - "87‑108" + { "value": "87‑108" } ] }, { - "label": "Signal‑Rausch‑Verhältnis (dB)", + "name": "Signal‑Rausch‑Verhältnis (dB)", "description": "Signal‑Rausch‑Verhältnis (dB)", "values": [ - 48, - 46, - 47, - 45, - 49, - 44 + { "value": 48 }, + { "value": 46 }, + { "value": 47 }, + { "value": 45 }, + { "value": 49 }, + { "value": 44 } ] }, { - "label": "Anschlüsse", + "name": "Anschlüsse", "description": "Anschlüsse", "values": [ - "UKW+Bluetooth+DL", - "UKW+Wi‑Fi+DL", - "UKW+DL+Bluetooth", - "UKW+Bluetooth+Wi‑Fi", - "UKW+Wi‑Fi+DL", - "UKW+Wi‑Fi", - "UKW+Bluetooth", - "UKW+DL", - "UKW" + { "value": "UKW+Bluetooth+DL" }, + { "value": "UKW+Wi‑Fi+DL" }, + { "value": "UKW+DL+Bluetooth" }, + { "value": "UKW+Bluetooth+Wi‑Fi" }, + { "value": "UKW+Wi‑Fi+DL" }, + { "value": "UKW+Wi‑Fi" }, + { "value": "UKW+Bluetooth" }, + { "value": "UKW+DL" }, + { "value": "UKW" } ] }, { - "label": "Ausgangsimpedanz (Ω)", + "name": "Ausgangsimpedanz (Ω)", "description": "Ausgangsimpedanz (Ω)", "values": [ - 75 + { "value": 75 } ] } ] }, { - "label": "mechanical", + "name": "mechanical", "description": "All mechanical properties", - "propertyTypes": [ + "property_types": [ { - "label": "Abmessungen (mm)", + "name": "Abmessungen (mm)", "description": "All mechanical properties", "values": [ - "158x88x33", - "310x210x110", - "160x90x35", - "170x100x42", - "150x80x30", - "155x85x32", - "165x95x38", - "305x205x105", - "172x102x44", - "340x240x140", - "420x320x140", - "162x92x36", - "300x200x100", - "168x98x40", - "315x215x115", - "325x225x125", - "415x315x135", - "320x220x120", - "335x235x135", - "330x230x130", - "400x300x120", - "405x305x125", - "345x245x145", - "295x245x135", - "410x310x130", - "290x240x130", - "285x235x125", - "280x230x120", - "275x225x115", - "270x220x110", - "265x215x105", - "255x205x95", - "260x210x100", - "250x200x90", - "445x345x165", - "440x340x160", - "435x335x155", - "430x330x150", - "425x325x145" + { "value": "158x88x33" }, + { "value": "310x210x110" }, + { "value": "160x90x35" }, + { "value": "170x100x42" }, + { "value": "150x80x30" }, + { "value": "155x85x32" }, + { "value": "165x95x38" }, + { "value": "305x205x105" }, + { "value": "172x102x44" }, + { "value": "340x240x140" }, + { "value": "420x320x140" }, + { "value": "162x92x36" }, + { "value": "300x200x100" }, + { "value": "168x98x40" }, + { "value": "315x215x115" }, + { "value": "325x225x125" }, + { "value": "415x315x135" }, + { "value": "320x220x120" }, + { "value": "335x235x135" }, + { "value": "330x230x130" }, + { "value": "400x300x120" }, + { "value": "405x305x125" }, + { "value": "345x245x145" }, + { "value": "295x245x135" }, + { "value": "410x310x130" }, + { "value": "290x240x130" }, + { "value": "285x235x125" }, + { "value": "280x230x120" }, + { "value": "275x225x115" }, + { "value": "270x220x110" }, + { "value": "265x215x105" }, + { "value": "255x205x95" }, + { "value": "260x210x100" }, + { "value": "250x200x90" }, + { "value": "445x345x165" }, + { "value": "440x340x160" }, + { "value": "435x335x155" }, + { "value": "430x330x150" }, + { "value": "425x325x145" } ] }, { - "label": "Gewicht (kg)", + "name": "Gewicht (kg)", "description": "All mechanical properties", "values": [ - 3, - 6, - 4, - 2 + { "value": 3 }, + { "value": 6 }, + { "value": 4 }, + { "value": 2 } ] }, { - "label": "Kapazität (kg)", + "name": "Kapazität (kg)", "description": "All mechanical properties", "values": [ - 0 + { "value": 0 } ] }, { - "label": "Programms/Features", + "name": "Programms/Features", "description": "All mechanical properties", "values": [] }, { - "label": "Wasserverbrauch pro Zyklus (L)", + "name": "Wasserverbrauch pro Zyklus (L)", "description": "All mechanical properties", "values": [] }, { - "label": "Material Innenraum", + "name": "Material Innenraum", "description": "All mechanical properties", "values": [] }, { - "label": "Kapazität/Volumen (L)", + "name": "Kapazität/Volumen (L)", "description": "All mechanical properties", "values": [] }, { - "label": "Schleuderdrehzahl (U/min)", + "name": "Schleuderdrehzahl (U/min)", "description": "All mechanical properties", "values": [] } ] }, { - "label": "other", + "name": "other", "description": "All other properties", - "propertyTypes": [ + "property_types": [ { - "label": "Preis (USD)", + "name": "Preis (USD)", "description": "All other properties", "values": [] }, { - "label": "Zusatzfunktionen", + "name": "Zusatzfunktionen", "description": "All other properties", "values": [] }, { - "label": "Bedienungsart", + "name": "Bedienungsart", "description": "All other properties", "values": [] }, { - "label": "Energieeffizienzklasse", + "name": "Energieeffizienzklasse", "description": "All other properties", "values": [] } diff --git a/xcpq/buildtime/xcpq_editor/cmd/config.toml b/xcpq/buildtime/xcpq_editor/cmd/config.toml index 697182581..870a09505 100644 --- a/xcpq/buildtime/xcpq_editor/cmd/config.toml +++ b/xcpq/buildtime/xcpq_editor/cmd/config.toml @@ -4,8 +4,8 @@ # password= dbname= [database] -##connection_string = "host=192.168.178.50 port=5432 user=tsindt password=XD14ko8d dbname=xcpq sslmode=disable" -connection_string = "host=localhost port=5432 user=tsindt password=XD14ko8d dbname=xcpq sslmode=disable" +connection_string = "host=192.168.178.50 port=5432 user=tsindt password=XD14ko8d dbname=xcpq sslmode=disable" +##connection_string = "host=localhost port=5432 user=tsindt password=XD14ko8d dbname=xcpq sslmode=disable" driver_name = "postgres" ################################################################ diff --git a/xcpq/buildtime/xcpq_editor/cmd/server/httpServer.go b/xcpq/buildtime/xcpq_editor/cmd/server/httpServer.go index dfeb6da63..45a22b38f 100644 --- a/xcpq/buildtime/xcpq_editor/cmd/server/httpServer.go +++ b/xcpq/buildtime/xcpq_editor/cmd/server/httpServer.go @@ -5,6 +5,8 @@ import ( "log" "net/http" "xcpq_editor/internal/handlers" + "xcpq_editor/internal/repositories" + "xcpq_editor/internal/services" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" @@ -12,18 +14,33 @@ import ( ) type HttpServer struct { - config *viper.Viper - router *gin.Engine - dbHandler *sql.DB + config *viper.Viper + router *gin.Engine + dbHandler *sql.DB + importHandler *handlers.ImportHandler + importRepository *repositories.Import_Repository + valueRepository *repositories.Value_Repository + propertyRepository *repositories.Property_Repository + propertyTypeRepository *repositories.Property_Type_Repository + propertyTypeGroupRepository *repositories.Property_Types_Group_Repository } func InitHttpServer(config *viper.Viper, dbHandler *sql.DB) HttpServer { + // db initialization can be done here if needed + // repository initialisation: + valueRepository := repositories.NewValueRepository(dbHandler) + propertyRepository := repositories.NewPropertyRepository(dbHandler, valueRepository) + propertyTypeRepository := repositories.NewPropertyTypeRepository(dbHandler, propertyRepository) + propertyTypeGroupRepository := repositories.NewPropertyTypesGroupRepository(dbHandler, propertyTypeRepository) + importRepository := repositories.NewImportRepository(dbHandler, valueRepository, propertyTypeRepository, propertyTypeGroupRepository, propertyRepository) // service initialisation: + importService := services.NewImportService(importRepository) - // controller initialisation: + // handler initialisation: + importHandler := handlers.NewImportHandler(importService) // Service API router := gin.Default() @@ -40,16 +57,22 @@ func InitHttpServer(config *viper.Viper, dbHandler *sql.DB) HttpServer { */ // import - router.POST("/import", handlers.ImportHandler_PropertyTypesGroup) + router.POST("/importPropertyTypes", importHandler.ImportPropertyTypeGroups) // test endpoint router.GET("/test", Test) // server return HttpServer{ - config: config, - router: router, - dbHandler: dbHandler, + config: config, + router: router, + dbHandler: dbHandler, + importHandler: importHandler, + importRepository: importRepository, + valueRepository: valueRepository, + propertyRepository: propertyRepository, + propertyTypeRepository: propertyTypeRepository, + propertyTypeGroupRepository: propertyTypeGroupRepository, } } diff --git a/xcpq/buildtime/xcpq_editor/data/propertyTypeGroups.json b/xcpq/buildtime/xcpq_editor/data/propertyTypeGroups.json index b21b5d8e3..68f428641 100644 --- a/xcpq/buildtime/xcpq_editor/data/propertyTypeGroups.json +++ b/xcpq/buildtime/xcpq_editor/data/propertyTypeGroups.json @@ -1,97 +1,286 @@ -[{ - "name": "Simply CPQ", - "description": "Property Type Group for Simply CPQ", - "property_types_groups": [ - { - "name": "electrical", - "description": "All electrical property types", - "property_types": [ - { - "name": "Spannungsversorgung (V)", - "description": "Spannungsversorgung (V)" - }, - { - "name": "Leistung (W)", - "description": "Leistung" - }, - { - "name": "Eingangsimpedanz (Ω)", - "description": "Wiederstand der Eingangsimpedanz" - }, - { - "name": "Frequenzbereich (Hz‑kHz)", - "description": "Frequenzbereich (Hz‑kHz)" - }, - { - "name": "Signal‑Rausch‑Verhältnis (dB)", - "description": "Signal‑Rausch‑Verhältnis (dB)" - }, - { - "name": "Anschlüsse", - "description": "Anschlüsse" - }, - { - "name": "Ausgangsimpedanz (Ω)", - "description": "Ausgangsimpedanz (Ω)" - } - ] - }, - { - "name": "mechanical", - "description": "All mechanical properties", - "property_types":[ - { - "name": "Abmessungen (mm)", - "description": "All mechanical properties" - }, - { - "name": "Gewicht (kg)", - "description": "All mechanical properties" - }, - { - "name": "Kapazität (kg)", - "description": "All mechanical properties" - }, - { - "name": "Programms/Features", - "description": "All mechanical properties" - }, - { - "name": "Wasserverbrauch pro Zyklus (L)", - "description": "All mechanical properties" - }, - { - "name": "Material Innenraum", - "description": "All mechanical properties" - } { - "name": "Kapazität/Volumen (L)", - "description": "All mechanical properties" - }, - { - "name": "Schleuderdrehzahl (U/min)", - "description": "All mechanical properties" - } - ] - }, - { - "name": "other", - "description": "All other properties", - "property_types":[ - { - "name": "Preis (USD)", - "description": "All other properties" - }, - { - "name": "Zusatzfunktionen", - "description": "All other properties" - }, { - "name": "Bedienungsart", - "description": "All other properties" - }, { - "name": "Energieeffizienzklasse", - "description": "All other properties" - } - ] - } - ] -}] \ No newline at end of file +[ + { + "name": "X-CPQ", + "description": "Property Type Group for X-CPQ", + "property_types_Groups": [ + { + "name": "electrical", + "description": "All electrical property types", + "property_types": [ + { + "name": "Spannungsversorgung (V)", + "description": "Spannungsversorgung (V)", + "property": { + "name": "Spannungsversorgung (V)", + "description": "Spannungsversorgung (V)", + "values": [ + { "value": "220" }, + { "value": "230" } + ] + } + }, + { + "name": "Leistung (W)", + "description": "Leistung", + "property": { + "name": "Leistung (W)", + "description": "Leistung", + "values": [ + { "value": "0" }, + { "value": "140" }, + { "value": "130" }, + { "value": "120" }, + { "value": "110" }, + { "value": "100" }, + { "value": "90" }, + { "value": "80" }, + { "value": "70" }, + { "value": "60" }, + { "value": "50" }, + { "value": "28" }, + { "value": "26" }, + { "value": "24" }, + { "value": "22" }, + { "value": "20" } + ] + } + }, + { + "name": "Eingangsimpedanz (Ω)", + "description": "Wiederstand der Eingangsimpedanz", + "property": { + "name": "Eingangsimpedanz (Ω)", + "description": "Wiederstand der Eingangsimpedanz", + "values": [ + { "value": "10" } + ] + } + }, + { + "name": "Frequenzbereich (Hz‑kHz)", + "description": "Frequenzbereich (Hz‑kHz)", + "property": { + "name": "Frequenzbereich (Hz‑kHz)", + "description": "Frequenzbereich (Hz‑kHz)", + "values": [ + { "value": "87‑108" } + ] + } + }, + { + "name": "Signal‑Rausch‑Verhältnis (dB)", + "description": "Signal‑Rausch‑Verhältnis (dB)", + "property": { + "name": "Signal‑Rausch‑Verhältnis (dB)", + "description": "Signal‑Rausch‑Verhältnis (dB)", + "values": [ + { "value": "48" }, + { "value": "46" }, + { "value": "47" }, + { "value": "45" }, + { "value": "49" }, + { "value": "44" } + ] + } + }, + { + "name": "Anschlüsse", + "description": "Anschlüsse", + "property": { + "name": "Anschlüsse", + "description": "Anschlüsse", + "values": [ + { "value": "UKW+Bluetooth+DL" }, + { "value": "UKW+Wi‑Fi+DL" }, + { "value": "UKW+DL+Bluetooth" }, + { "value": "UKW+Bluetooth+Wi‑Fi" }, + { "value": "UKW+Wi‑Fi+DL" }, + { "value": "UKW+Wi‑Fi" }, + { "value": "UKW+Bluetooth" }, + { "value": "UKW+DL" }, + { "value": "UKW" } + ] + } + }, + { + "name": "Ausgangsimpedanz (Ω)", + "description": "Ausgangsimpedanz (Ω)", + "property": { + "name": "Ausgangsimpedanz (Ω)", + "description": "Ausgangsimpedanz (Ω)", + "values": [ + { "value": "75" } + ] + } + } + ] + }, + { + "name": "mechanical", + "description": "All mechanical properties", + "property_types": [ + { + "name": "Abmessungen (mm)", + "description": "All mechanical properties", + "property": { + "name": "Abmessungen (mm)", + "description": "All mechanical properties", + "values": [ + { "value": "158x88x33" }, + { "value": "310x210x110" }, + { "value": "160x90x35" }, + { "value": "170x100x42" }, + { "value": "150x80x30" }, + { "value": "155x85x32" }, + { "value": "165x95x38" }, + { "value": "305x205x105" }, + { "value": "172x102x44" }, + { "value": "340x240x140" }, + { "value": "420x320x140" }, + { "value": "162x92x36" }, + { "value": "300x200x100" }, + { "value": "168x98x40" }, + { "value": "315x215x115" }, + { "value": "325x225x125" }, + { "value": "415x315x135" }, + { "value": "320x220x120" }, + { "value": "335x235x135" }, + { "value": "330x230x130" }, + { "value": "400x300x120" }, + { "value": "405x305x125" }, + { "value": "345x245x145" }, + { "value": "295x245x135" }, + { "value": "410x310x130" }, + { "value": "290x240x130" }, + { "value": "285x235x125" }, + { "value": "280x230x120" }, + { "value": "275x225x115" }, + { "value": "270x220x110" }, + { "value": "265x215x105" }, + { "value": "255x205x95" }, + { "value": "260x210x100" }, + { "value": "250x200x90" }, + { "value": "445x345x165" }, + { "value": "440x340x160" }, + { "value": "435x335x155" }, + { "value": "430x330x150" }, + { "value": "425x325x145" } + ] + }, + { + "name": "Gewicht (kg)", + "description": "All mechanical properties", + "property": { + "name": "Gewicht (kg)", + "description": "All mechanical properties", + "values": [ + { "value": "3" }, + { "value": "6" }, + { "value": "4" }, + { "value": "2" } + ] + } + }, + { + "name": "Kapazität (kg)", + "description": "All mechanical properties", + "property": { + "name": "Kapazität (kg)", + "description": "All mechanical properties", + "values": [ + { "value": "0" } + ] + } + }, + { + "name": "Programms/Features", + "description": "All mechanical properties", + "property": { + "name": "Programms/Features", + "description": "All mechanical properties", + "values": [] + } + }, + { + "name": "Wasserverbrauch pro Zyklus (L)", + "description": "All mechanical properties", + "property": { + "name": "Wasserverbrauch pro Zyklus (L)", + "description": "All mechanical properties", + "values": [] + } + }, + { + "name": "Material Innenraum", + "description": "All mechanical properties", + "property": { + "name": "Material Innenraum", + "description": "All mechanical properties", + "values": [] + } + }, + { + "name": "Kapazität/Volumen (L)", + "description": "All mechanical properties", + "property": { + "name": "Kapazität/Volumen (L)", + "description": "All mechanical properties", + "values": [] + } + }, + { + "name": "Schleuderdrehzahl (U/min)", + "description": "All mechanical properties", + "property": { + "name": "Schleuderdrehzahl (U/min)", + "description": "All mechanical properties", + "values": [] + } + } + ] + }, + { + "name": "other", + "description": "All other properties", + "property_types": [ + { + "name": "Preis (USD)", + "description": "All other properties", + "property": { + "name": "Preis (USD)", + "description": "All other properties", + "values": [] + } + }, + { + "name": "Zusatzfunktionen", + "description": "All other properties", + "property": { + "name": "Zusatzfunktionen", + "description": "All other properties", + "values": [] + } + }, + { + "name": "Bedienungsart", + "description": "All other properties", + "property": { + "name": "Bedienungsart", + "description": "All other properties", + "values": [] + } + }, + { + "name": "Energieeffizienzklasse", + "description": "All other properties", + "property": { + "name": "Energieeffizienzklasse", + "description": "All other properties", + "values": [] + } + } + ] + } + ] + } +] \ No newline at end of file diff --git a/xcpq/buildtime/xcpq_editor/internal/handlers/import_handler.go b/xcpq/buildtime/xcpq_editor/internal/handlers/import_handler.go index 85e9aaf58..fac366ab2 100644 --- a/xcpq/buildtime/xcpq_editor/internal/handlers/import_handler.go +++ b/xcpq/buildtime/xcpq_editor/internal/handlers/import_handler.go @@ -1,13 +1,25 @@ package handlers import ( + "log" "net/http" "xcpq_editor/internal/models" + "xcpq_editor/internal/services" "github.com/gin-gonic/gin" ) -func ImportHandler_PropertyTypesGroup(ctx *gin.Context) { +type ImportHandler struct { + importService *services.Import_Service +} + +func NewImportHandler(i *services.Import_Service) *ImportHandler { + return &ImportHandler{ + importService: i, + } +} + +func (h *ImportHandler) ImportPropertyTypeGroups(ctx *gin.Context) { // Handle the import request here var importData []models.Property_Types_Group @@ -16,6 +28,16 @@ func ImportHandler_PropertyTypesGroup(ctx *gin.Context) { return } + for _, item := range importData { + log.Println("Importing property types group with ID:", item.Id) + log.Println("Anzahl Sub-Groups:", len(item.Property_Types_Groups)) + err := h.importService.ImportPropertyTypesData(&item, nil) + if err != nil { + ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + } + ctx.JSON(http.StatusOK, gin.H{ "message": "Import successful", }) diff --git a/xcpq/buildtime/xcpq_editor/internal/middleware/.ignore b/xcpq/buildtime/xcpq_editor/internal/middleware/.ignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/xcpq/buildtime/xcpq_editor/internal/models/property.go b/xcpq/buildtime/xcpq_editor/internal/models/property.go index b8463a532..0688c4b2c 100644 --- a/xcpq/buildtime/xcpq_editor/internal/models/property.go +++ b/xcpq/buildtime/xcpq_editor/internal/models/property.go @@ -1,7 +1,7 @@ package models type Property struct { - Id int `json:"id"` + Id int `json:"id,omitempty"` Name string `json:"name"` Description string `json:"description,omitempty"` Image_Url string `json:"image_url,omitempty"` diff --git a/xcpq/buildtime/xcpq_editor/internal/models/property_type.go b/xcpq/buildtime/xcpq_editor/internal/models/property_type.go index 645beee8b..60a0d2dfd 100644 --- a/xcpq/buildtime/xcpq_editor/internal/models/property_type.go +++ b/xcpq/buildtime/xcpq_editor/internal/models/property_type.go @@ -1,7 +1,7 @@ package models type Property_Type struct { - Id int `json:"id"` + Id int `json:"id,omitempty"` Name string `json:"name"` Description string `json:"description,omitempty"` Image_Url string `json:"image_url,omitempty"` diff --git a/xcpq/buildtime/xcpq_editor/internal/models/property_types_group.go b/xcpq/buildtime/xcpq_editor/internal/models/property_types_group.go index 7ddd01afa..0bcba922c 100644 --- a/xcpq/buildtime/xcpq_editor/internal/models/property_types_group.go +++ b/xcpq/buildtime/xcpq_editor/internal/models/property_types_group.go @@ -1,7 +1,7 @@ package models type Property_Types_Group struct { - Id int `json:"id"` + Id int `json:"id,omitempty"` Name string `json:"name"` Description string `json:"description,omitempty"` Image_Url string `json:"image_url,omitempty"` diff --git a/xcpq/buildtime/xcpq_editor/internal/models/value.go b/xcpq/buildtime/xcpq_editor/internal/models/value.go index feca6805a..4a61988e4 100644 --- a/xcpq/buildtime/xcpq_editor/internal/models/value.go +++ b/xcpq/buildtime/xcpq_editor/internal/models/value.go @@ -1,7 +1,7 @@ package models type Value struct { - Id int `json:"id"` + Id int `json:"id,omitempty"` Value string `json:"value"` Image_Url string `json:"image_url,omitempty"` } diff --git a/xcpq/buildtime/xcpq_editor/internal/repositories/import_repository.go b/xcpq/buildtime/xcpq_editor/internal/repositories/import_repository.go index 3ff766f4f..424c3a1be 100644 --- a/xcpq/buildtime/xcpq_editor/internal/repositories/import_repository.go +++ b/xcpq/buildtime/xcpq_editor/internal/repositories/import_repository.go @@ -2,6 +2,7 @@ package repositories import ( "database/sql" + "log" "xcpq_editor/internal/models" ) @@ -13,7 +14,7 @@ type Import_Repository struct { pr *Property_Repository } -func NewImport_Repository(db *sql.DB, vr *Value_Repository, pt *Property_Type_Repository, ptg *Property_Types_Group_Repository, pr *Property_Repository) *Import_Repository { +func NewImportRepository(db *sql.DB, vr *Value_Repository, pt *Property_Type_Repository, ptg *Property_Types_Group_Repository, pr *Property_Repository) *Import_Repository { return &Import_Repository{ db: db, vr: vr, @@ -34,14 +35,17 @@ func (r *Import_Repository) ImportPropertyTypesData(newGroup *models.Property_Ty if err != nil { return err } + log.Println("Created new property types group with ID:", group.Id) newGroup.Id = group.Id for _, childPropertyType := range newGroup.Property_Types { + log.Println("Creating new property type with ID:", childPropertyType.Id) _, err := r.pt.CreatePropertyType(&childPropertyType, newGroup, &childPropertyType.Property) if err != nil { return err } } for _, childGroup := range newGroup.Property_Types_Groups { + log.Println("Importing child property types group with ID:", childGroup.Id) err := r.ImportPropertyTypesData(&childGroup, newGroup) if err != nil { return err diff --git a/xcpq/buildtime/xcpq_editor/internal/repositories/property_repository.go b/xcpq/buildtime/xcpq_editor/internal/repositories/property_repository.go index 10ccaed7f..4bea50887 100644 --- a/xcpq/buildtime/xcpq_editor/internal/repositories/property_repository.go +++ b/xcpq/buildtime/xcpq_editor/internal/repositories/property_repository.go @@ -45,8 +45,8 @@ func (pr *Property_Repository) CreateProperty( parent_property_id = 0 } - query := `INSERT INTO properties (name, description, parent_property_id, property_type_id, product_id, image_url) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id` - err := pr.db.QueryRow(query, property.Name, property.Description, parent_property_id, property_type_id, product_id, property.image_url).Scan(&property.Id) + query := `INSERT INTO properties.properties (name, description, parent_property_id, property_type_id, products_id, image_url) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id` + err := pr.db.QueryRow(query, property.Name, property.Description, parent_property_id, property_type_id, product_id, property.Image_Url).Scan(&property.Id) if err != nil { return nil, err } @@ -70,10 +70,10 @@ func (pr *Property_Repository) CreateProperty( func (pr *Property_Repository) GetPropertyById(id int) (*models.Property, error) { // Implement the logic to retrieve a property by its ID from the database - query := `SELECT id, name, description, parent_property_id, image_url FROM properties WHERE id = $1` + query := `SELECT id, name, description, parent_property_id, image_url FROM properties.properties WHERE id = $1` property := &models.Property{} var parent_property_id int - err := pr.db.QueryRow(query, id).Scan(&property.Id, &property.Name, &property.Description, &parent_property_id, &property.image_url) + err := pr.db.QueryRow(query, id).Scan(&property.Id, &property.Name, &property.Description, &parent_property_id, &property.Image_Url) if err != nil { return nil, err } @@ -103,8 +103,8 @@ func (pr *Property_Repository) GetPropertyById(id int) (*models.Property, error) func (pr *Property_Repository) UpdateProperty(property *models.Property) error { // Implement the logic to update an existing property in the database - query := `UPDATE properties SET name=$1, description=$2, image_url=$3 WHERE id=$4` - _, err := pr.db.Exec(query, property.Name, property.Description, property.image_url, property.Id) + query := `UPDATE properties.properties SET name=$1, description=$2, image_url=$3 WHERE id=$4` + _, err := pr.db.Exec(query, property.Name, property.Description, property.Image_Url, property.Id) return err } @@ -116,7 +116,7 @@ func (pr *Property_Repository) DeleteProperty(id int) error { return err } - query := `DELETE FROM properties WHERE id=$1` + query := `DELETE FROM properties.properties WHERE id=$1` _, err = pr.db.Exec(query, id) return err } diff --git a/xcpq/buildtime/xcpq_editor/internal/repositories/property_type_repository.go b/xcpq/buildtime/xcpq_editor/internal/repositories/property_type_repository.go index ff5f06669..fa440dbe7 100644 --- a/xcpq/buildtime/xcpq_editor/internal/repositories/property_type_repository.go +++ b/xcpq/buildtime/xcpq_editor/internal/repositories/property_type_repository.go @@ -29,8 +29,8 @@ func (ptr *Property_Type_Repository) CreatePropertyType( } else { property_type_group_id = 0 } - query := `INSERT INTO property_types (name, description, property_type_group_id, image_url) VALUES ($1, $2, $3, $4) RETURNING id` - err := ptr.db.QueryRow(query, property_type.Name, property_type.Description, property_type_group_id, property_type.image_url).Scan(&property_type.Id) + query := `INSERT INTO properties.property_types (name, description, property_types_groups_id, image_url) VALUES ($1, $2, $3, $4) RETURNING id` + err := ptr.db.QueryRow(query, property_type.Name, property_type.Description, property_type_group_id, property_type.Image_Url).Scan(&property_type.Id) if err != nil { return nil, err } @@ -50,9 +50,9 @@ func (ptr *Property_Type_Repository) CreatePropertyType( func (ptr *Property_Type_Repository) GetPropertyTypeById(id int) (*models.Property_Type, error) { // Implement the logic to retrieve a property type by its ID from the database - query := "SELECT id, name, description, image_url FROM property_types WHERE id = $1" + query := "SELECT id, name, description, image_url FROM properties.property_types WHERE id = $1" property_type := &models.Property_Type{} - err := ptr.db.QueryRow(query, id).Scan(&property_type.Id, &property_type.Name, &property_type.Description, &property_type.image_url) + err := ptr.db.QueryRow(query, id).Scan(&property_type.Id, &property_type.Name, &property_type.Description, &property_type.Image_Url) if err != nil { return nil, err } @@ -63,14 +63,14 @@ func (ptr *Property_Type_Repository) GetPropertyTypeById(id int) (*models.Proper func (ptr *Property_Type_Repository) UpdatePropertyType(property_type *models.Property_Type) error { // Implement the logic to update the label/description of an existing property type - query := `UPDATE property_types SET name=$1, description=$2, image_url=$3 WHERE id=$4` - _, err := ptr.db.Exec(query, property_type.Name, property_type.Description, property_type.image_url, property_type.Id) + query := `UPDATE properties.property_types SET name=$1, description=$2, image_url=$3 WHERE id=$4` + _, err := ptr.db.Exec(query, property_type.Name, property_type.Description, property_type.Image_Url, property_type.Id) return err } func (ptr *Property_Type_Repository) DeletePropertyTypeById(id int) error { // Implement the logic to delete a property type from the database - query := `DELETE FROM property_types WHERE id=$1` + query := `DELETE FROM properties.property_types WHERE id=$1` _, err := ptr.db.Exec(query, id) return err } diff --git a/xcpq/buildtime/xcpq_editor/internal/repositories/property_types_group_repository.go b/xcpq/buildtime/xcpq_editor/internal/repositories/property_types_group_repository.go index f5b791a7c..4b9a0fdfd 100644 --- a/xcpq/buildtime/xcpq_editor/internal/repositories/property_types_group_repository.go +++ b/xcpq/buildtime/xcpq_editor/internal/repositories/property_types_group_repository.go @@ -25,10 +25,10 @@ func (ptrg *Property_Types_Group_Repository) CreatePropertyTypesGroup(property_t parentPropertyTypeGroup.Property_Types_Groups = append(parentPropertyTypeGroup.Property_Types_Groups, *property_types_group) } else { parentId = 0 // or any other value that indicates no parent - property_types_group.Property_Types_Groups = []models.Property_Types_Group{} - property_types_group.Property_Types = []models.Property_Type{} + //property_types_group.Property_Types_Groups = []models.Property_Types_Group{} + //property_types_group.Property_Types = []models.Property_Type{} } - query := `INSERT INTO property_types_groups (name, description, image_url, parent_property_type_group) VALUES ($1, $2, $3, $4) RETURNING id` + query := `INSERT INTO properties.property_types_groups (name, description, image_url, parent_property_type_group_id) VALUES ($1, $2, $3, $4) RETURNING id` err := ptrg.db.QueryRow(query, property_types_group.Name, property_types_group.Description, property_types_group.Image_Url, parentId).Scan(&property_types_group.Id) if err != nil { return nil, err @@ -38,7 +38,7 @@ func (ptrg *Property_Types_Group_Repository) CreatePropertyTypesGroup(property_t func (ptrg *Property_Types_Group_Repository) GetPropertyTypesGroupById(id int) (*models.Property_Types_Group, error) { // Implement the logic to retrieve a property types group by its ID from the database - query := "SELECT id, name, description, image_url FROM property_types_groups WHERE id = $1" + query := "SELECT id, name, description, image_url FROM properties.property_types_groups WHERE id = $1" property_types_group := &models.Property_Types_Group{} err := ptrg.db.QueryRow(query, id).Scan(&property_types_group.Id, &property_types_group.Name, &property_types_group.Description, &property_types_group.Image_Url) if err != nil { @@ -46,7 +46,7 @@ func (ptrg *Property_Types_Group_Repository) GetPropertyTypesGroupById(id int) ( } // get all childs - queryChilds := "SELECT id FROM property_types_groups WHERE parent_property_type_group = $1" + queryChilds := "SELECT id FROM properties.property_types_groups WHERE parent_property_types_groups_id = $1" rows, err := ptrg.db.Query(queryChilds, id) if err != nil { return nil, err @@ -92,18 +92,18 @@ func (ptrg *Property_Types_Group_Repository) GetPropertyTypesGroupById(id int) ( func (ptrg *Property_Types_Group_Repository) UpdatePropertyTypesGroup(property_types_group *models.Property_Types_Group) error { // Implement the logic to update the label/description of an existing property types group - query := `UPDATE property_types_groups SET name=$1, description=$2, image_url=$3 WHERE id=$4` + query := `UPDATE properties.property_types_groups SET name=$1, description=$2, image_url=$3 WHERE id=$4` _, err := ptrg.db.Exec(query, property_types_group.Name, property_types_group.Description, property_types_group.Image_Url, property_types_group.Id) return err } func (ptrg *Property_Types_Group_Repository) DeletePropertyTypesGroup(id int) error { // Implement the logic to delete a property types group from the database - query := `DELETE FROM property_types_groups WHERE id=$1` + query := `DELETE FROM properties.property_types_groups WHERE id=$1` _, err := ptrg.db.Exec(query, id) // delete all child property types groups - queryChilds := "SELECT id FROM property_types_groups WHERE parent_property_type_group = $1" + queryChilds := "SELECT id FROM properties.property_types_groups WHERE parent_property_types_groups_id = $1" rows, err := ptrg.db.Query(queryChilds, id) if err != nil { return err @@ -123,7 +123,7 @@ func (ptrg *Property_Types_Group_Repository) DeletePropertyTypesGroup(id int) er } // delete all property types in this group - queryProperties := "SELECT id FROM property_types WHERE property_types_group = $1" + queryProperties := "SELECT id FROM properties.property_types WHERE property_types_group = $1" rowsProperties, err := ptrg.db.Query(queryProperties, id) if err != nil { return err diff --git a/xcpq/buildtime/xcpq_editor/internal/repositories/value_repository.go b/xcpq/buildtime/xcpq_editor/internal/repositories/value_repository.go index 91246bbe5..6c88f7df6 100644 --- a/xcpq/buildtime/xcpq_editor/internal/repositories/value_repository.go +++ b/xcpq/buildtime/xcpq_editor/internal/repositories/value_repository.go @@ -17,7 +17,7 @@ func NewValueRepository(db *sql.DB) *Value_Repository { func (vr *Value_Repository) CreateValueForPropertyId(propertyId int, value *models.Value) (*models.Value, error) { // Implement the logic to create a new value for the given propertyId in the database - query := `INSERT INTO values (propertyid, value, image_url) VALUES ($1, $2, $3) RETURNING id` + query := `INSERT INTO properties.values (propertyid, value, image_url) VALUES ($1, $2, $3) RETURNING id` err := vr.db.QueryRow(query, propertyId, value.Value, value.Image_Url).Scan(&value.Id) if err != nil { return nil, err @@ -27,21 +27,21 @@ func (vr *Value_Repository) CreateValueForPropertyId(propertyId int, value *mode func (vr *Value_Repository) DeleteValueFromPropertyId(valueId int, propertyId int) error { // Implement the logic to delete the value from the database for the given valueId and propertyId - query := `DELETE FROM values WHERE id=$1 AND propertyid=$2` + query := `DELETE FROM properties.values WHERE id=$1 AND propertyid=$2` _, err := vr.db.Exec(query, valueId, propertyId) return err } func (vr *Value_Repository) UpdateValue(value *models.Value) error { // Implement the logic to update the value in the database for the given valueId - query := `UPDATE values SET value=$1, image_url=$2 WHERE id=$3` + query := `UPDATE properties.values SET value=$1, image_url=$2 WHERE id=$3` _, err := vr.db.Exec(query, value.Value, value.Image_Url, value.Id) return err } func (vr *Value_Repository) GetValue(id int) (*models.Value, error) { // Implement the logic to retrieve a value by its ID from the database - query := "SELECT id, value, image_url FROM values WHERE id = $1" + query := "SELECT id, value, image_url FROM properties.values WHERE id = $1" row := vr.db.QueryRow(query, id) value := &models.Value{} err := row.Scan(&value.Id, &value.Value, &value.Image_Url) @@ -53,14 +53,14 @@ func (vr *Value_Repository) GetValue(id int) (*models.Value, error) { func (vr *Value_Repository) DeleteValuesFromPropertyId(propertyId int) error { // Implement the logic to delete all values from the database for the given propertyId - query := `DELETE FROM values WHERE propertyid=$1` + query := `DELETE FROM properties.values WHERE propertyid=$1` _, err := vr.db.Exec(query, propertyId) return err } func (vr *Value_Repository) GetValuesFromPropertyId(propertyId int) ([]*models.Value, error) { // Implement the logic to retrieve all values from the database for the given propertyId - query := `SELECT id, value, image_url FROM values WHERE propertyid=$1` + query := `SELECT id, value, image_url FROM properties.values WHERE propertyid=$1` rows, err := vr.db.Query(query, propertyId) if err != nil { return nil, err diff --git a/xcpq/buildtime/xcpq_editor/internal/services/import_service.go b/xcpq/buildtime/xcpq_editor/internal/services/import_service.go index 385044db5..ba7cd38f8 100644 --- a/xcpq/buildtime/xcpq_editor/internal/services/import_service.go +++ b/xcpq/buildtime/xcpq_editor/internal/services/import_service.go @@ -9,7 +9,7 @@ type Import_Service struct { importRepository *repositories.Import_Repository } -func NewImport_Service(importRepository *repositories.Import_Repository) *Import_Service { +func NewImportService(importRepository *repositories.Import_Repository) *Import_Service { return &Import_Service{ importRepository: importRepository, } diff --git a/xcpq/database/dump-xcpq-202609141431.sql b/xcpq/database/dump-xcpq-202609141431.sql new file mode 100644 index 000000000..d0fcda5fa --- /dev/null +++ b/xcpq/database/dump-xcpq-202609141431.sql @@ -0,0 +1,329 @@ +-- +-- PostgreSQL database dump +-- + +\restrict QLwsCbodiNlV3JQJRfmAVxaxLqILLV0Fv9uJeVlzDiu4p6FKUIYquZWE1PbaK7o + +-- Dumped from database version 18.4 (Debian 18.4-1.pgdg13+1) +-- Dumped by pg_dump version 18.4 + +-- Started on 2026-09-14 14:31:10 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 6 (class 2615 OID 20689) +-- Name: properties; Type: SCHEMA; Schema: -; Owner: tsindt +-- + +CREATE SCHEMA properties; + + +ALTER SCHEMA properties OWNER TO tsindt; + +-- +-- TOC entry 3481 (class 0 OID 0) +-- Dependencies: 6 +-- Name: SCHEMA properties; Type: COMMENT; Schema: -; Owner: tsindt +-- + +COMMENT ON SCHEMA properties IS 'Alle Tabellen, die mit Properties und Values zu tun haben.'; + + +-- +-- TOC entry 220 (class 1259 OID 20691) +-- Name: properties_id_seq; Type: SEQUENCE; Schema: properties; Owner: tsindt +-- + +CREATE SEQUENCE properties.properties_id_seq + START WITH 1000000 + INCREMENT BY 1 + MINVALUE 1000000 + MAXVALUE 4999999 + CACHE 1; + + +ALTER SEQUENCE properties.properties_id_seq OWNER TO tsindt; + +-- +-- TOC entry 3482 (class 0 OID 0) +-- Dependencies: 220 +-- Name: SEQUENCE properties_id_seq; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON SEQUENCE properties.properties_id_seq IS 'Zähler für property und value IDs '; + + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 223 (class 1259 OID 20722) +-- Name: properties; Type: TABLE; Schema: properties; Owner: tsindt +-- + +CREATE TABLE properties.properties ( + id bigint DEFAULT nextval('properties.properties_id_seq'::regclass) NOT NULL, + name text, + description text, + parent_property_id bigint DEFAULT 0 NOT NULL, + property_type_id bigint NOT NULL, + products_groups_id bigint DEFAULT 0 NOT NULL, + products_id bigint DEFAULT 0 NOT NULL, + image_url text DEFAULT 'https://www.thomas-sindt.de/img/properties_group.svg'::text +); + + +ALTER TABLE properties.properties OWNER TO tsindt; + +-- +-- TOC entry 3483 (class 0 OID 0) +-- Dependencies: 223 +-- Name: TABLE properties; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON TABLE properties.properties IS 'Eigenschaften, die Listen von Werten enthalten und eine Information, von welchem property sich dieses Property ableitet. Ist parent_property_id = 0, dann ist dieses ein Root-Property zu dem referenzierten PropertyType.'; + + +-- +-- TOC entry 3484 (class 0 OID 0) +-- Dependencies: 223 +-- Name: COLUMN properties.name; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON COLUMN properties.properties.name IS 'Der Name sollte derselbe sein, wie der referenzierte Property Type.'; + + +-- +-- TOC entry 3485 (class 0 OID 0) +-- Dependencies: 223 +-- Name: COLUMN properties.products_groups_id; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON COLUMN properties.properties.products_groups_id IS 'Referenziert auf dieProduktgruppe, zu dem dieses Property gehört. Wenn es zu keiner Produktgruppe gehört ist diese referenz = 0'; + + +-- +-- TOC entry 3486 (class 0 OID 0) +-- Dependencies: 223 +-- Name: COLUMN properties.products_id; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON COLUMN properties.properties.products_id IS 'Referenziert auf das Produkt, zu dem dieses Property gehört. Wenn es zu keinem Produkt gehört ist diese referenz = 0'; + + +-- +-- TOC entry 222 (class 1259 OID 20707) +-- Name: property_types; Type: TABLE; Schema: properties; Owner: tsindt +-- + +CREATE TABLE properties.property_types ( + id bigint DEFAULT nextval('properties.properties_id_seq'::regclass) NOT NULL, + name text, + description text, + property_types_groups_id bigint NOT NULL, + image_url text DEFAULT 'https://www.thomas-sindt.de/img/category.svg'::text +); + + +ALTER TABLE properties.property_types OWNER TO tsindt; + +-- +-- TOC entry 3487 (class 0 OID 0) +-- Dependencies: 222 +-- Name: TABLE property_types; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON TABLE properties.property_types IS 'Definition von properties'; + + +-- +-- TOC entry 221 (class 1259 OID 20698) +-- Name: property_types_groups; Type: TABLE; Schema: properties; Owner: tsindt +-- + +CREATE TABLE properties.property_types_groups ( + id bigint DEFAULT nextval('properties.properties_id_seq'::regclass) CONSTRAINT property_types_group_id_not_null NOT NULL, + name text, + description text, + parent_property_type_group_id bigint, + image_url text DEFAULT 'https://thomas-sindt/img/category.svg'::text +); + + +ALTER TABLE properties.property_types_groups OWNER TO tsindt; + +-- +-- TOC entry 3488 (class 0 OID 0) +-- Dependencies: 221 +-- Name: TABLE property_types_groups; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON TABLE properties.property_types_groups IS 'Baumstruktur zur Organisation von Property types +Wenn parent_property_types_group = 0, dann ist diese Gruppe eine Rootgruppe.'; + + +-- +-- TOC entry 224 (class 1259 OID 20743) +-- Name: values; Type: TABLE; Schema: properties; Owner: tsindt +-- + +CREATE TABLE properties."values" ( + id bigint DEFAULT nextval('properties.properties_id_seq'::regclass) NOT NULL, + value text, + properties_id bigint NOT NULL, + image_url text DEFAULT 'https://www.thomas-sindt.de/img/property.svg'::text +); + + +ALTER TABLE properties."values" OWNER TO tsindt; + +-- +-- TOC entry 3474 (class 0 OID 20722) +-- Dependencies: 223 +-- Data for Name: properties; Type: TABLE DATA; Schema: properties; Owner: tsindt +-- + +COPY properties.properties (id, name, description, parent_property_id, property_type_id, products_groups_id, products_id, image_url) FROM stdin; +\. + + +-- +-- TOC entry 3473 (class 0 OID 20707) +-- Dependencies: 222 +-- Data for Name: property_types; Type: TABLE DATA; Schema: properties; Owner: tsindt +-- + +COPY properties.property_types (id, name, description, property_types_groups_id, image_url) FROM stdin; +\. + + +-- +-- TOC entry 3472 (class 0 OID 20698) +-- Dependencies: 221 +-- Data for Name: property_types_groups; Type: TABLE DATA; Schema: properties; Owner: tsindt +-- + +COPY properties.property_types_groups (id, name, description, parent_property_type_group_id, image_url) FROM stdin; +\. + + +-- +-- TOC entry 3475 (class 0 OID 20743) +-- Dependencies: 224 +-- Data for Name: values; Type: TABLE DATA; Schema: properties; Owner: tsindt +-- + +COPY properties."values" (id, value, properties_id, image_url) FROM stdin; +\. + + +-- +-- TOC entry 3489 (class 0 OID 0) +-- Dependencies: 220 +-- Name: properties_id_seq; Type: SEQUENCE SET; Schema: properties; Owner: tsindt +-- + +SELECT pg_catalog.setval('properties.properties_id_seq', 1000000, false); + + +-- +-- TOC entry 3318 (class 2606 OID 20733) +-- Name: properties properties_pkey; Type: CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties.properties + ADD CONSTRAINT properties_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3314 (class 2606 OID 20706) +-- Name: property_types_groups property_types_group_pkey; Type: CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties.property_types_groups + ADD CONSTRAINT property_types_group_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3316 (class 2606 OID 20716) +-- Name: property_types property_types_pkey; Type: CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties.property_types + ADD CONSTRAINT property_types_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3320 (class 2606 OID 20752) +-- Name: values values_pkey; Type: CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties."values" + ADD CONSTRAINT values_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3322 (class 2606 OID 20734) +-- Name: properties parent_property_type_id_fk; Type: FK CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties.properties + ADD CONSTRAINT parent_property_type_id_fk FOREIGN KEY (property_type_id) REFERENCES properties.property_types(id); + + +-- +-- TOC entry 3490 (class 0 OID 0) +-- Dependencies: 3322 +-- Name: CONSTRAINT parent_property_type_id_fk ON properties; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON CONSTRAINT parent_property_type_id_fk ON properties.properties IS 'Verweißt auf den Property Type dieses Properties'; + + +-- +-- TOC entry 3323 (class 2606 OID 20753) +-- Name: values properties_id_fk; Type: FK CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties."values" + ADD CONSTRAINT properties_id_fk FOREIGN KEY (properties_id) REFERENCES properties.properties(id); + + +-- +-- TOC entry 3321 (class 2606 OID 20717) +-- Name: property_types property_types_groups_id_fk; Type: FK CONSTRAINT; Schema: properties; Owner: tsindt +-- + +ALTER TABLE ONLY properties.property_types + ADD CONSTRAINT property_types_groups_id_fk FOREIGN KEY (property_types_groups_id) REFERENCES properties.property_types_groups(id); + + +-- +-- TOC entry 3491 (class 0 OID 0) +-- Dependencies: 3321 +-- Name: CONSTRAINT property_types_groups_id_fk ON property_types; Type: COMMENT; Schema: properties; Owner: tsindt +-- + +COMMENT ON CONSTRAINT property_types_groups_id_fk ON properties.property_types IS 'Referenz auf die Property Type Gruppe, zu der dieser Property Type gehört.'; + + +-- Completed on 2026-09-14 14:31:11 + +-- +-- PostgreSQL database dump complete +-- + +\unrestrict QLwsCbodiNlV3JQJRfmAVxaxLqILLV0Fv9uJeVlzDiu4p6FKUIYquZWE1PbaK7o +