This commit is contained in:
2026-09-14 08:52:58 +02:00
10 changed files with 825 additions and 99 deletions
@@ -0,0 +1,211 @@
[
{
"label": "X-CPQ",
"description": "Property Type Group for X-CPQ",
"propertyTypeGroups": [
{
"label": "electrical",
"description": "All electrical property types",
"propertyTypes": [
{
"label": "Spannungsversorgung (V)",
"description": "Spannungsversorgung (V)",
"values": [
220,
230
]
},
{
"label": "Leistung (W)",
"description": "Leistung",
"values": [
0,
140,
130,
120,
110,
100,
90,
80,
70,
60,
50,
28,
26,
24,
22,
20
]
},
{
"label": "Eingangsimpedanz (Ω)",
"description": "Wiederstand der Eingangsimpedanz",
"values": [
10
]
},
{
"label": "Frequenzbereich (Hz‑kHz)",
"description": "Frequenzbereich (Hz‑kHz)",
"values": [
"87‑108"
]
},
{
"label": "Signal‑Rausch‑Verhältnis (dB)",
"description": "Signal‑Rausch‑Verhältnis (dB)",
"values": [
48,
46,
47,
45,
49,
44
]
},
{
"label": "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"
]
},
{
"label": "Ausgangsimpedanz (Ω)",
"description": "Ausgangsimpedanz (Ω)",
"values": [
75
]
}
]
},
{
"label": "mechanical",
"description": "All mechanical properties",
"propertyTypes": [
{
"label": "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"
]
},
{
"label": "Gewicht (kg)",
"description": "All mechanical properties",
"values": [
3,
6,
4,
2
]
},
{
"label": "Kapazität (kg)",
"description": "All mechanical properties",
"values": [
0
]
},
{
"label": "Programms/Features",
"description": "All mechanical properties",
"values": []
},
{
"label": "Wasserverbrauch pro Zyklus (L)",
"description": "All mechanical properties",
"values": []
},
{
"label": "Material Innenraum",
"description": "All mechanical properties",
"values": []
},
{
"label": "Kapazität/Volumen (L)",
"description": "All mechanical properties",
"values": []
},
{
"label": "Schleuderdrehzahl (U/min)",
"description": "All mechanical properties",
"values": []
}
]
},
{
"label": "other",
"description": "All other properties",
"propertyTypes": [
{
"label": "Preis (USD)",
"description": "All other properties",
"values": []
},
{
"label": "Zusatzfunktionen",
"description": "All other properties",
"values": []
},
{
"label": "Bedienungsart",
"description": "All other properties",
"values": []
},
{
"label": "Energieeffizienzklasse",
"description": "All other properties",
"values": []
}
]
}
]
}
]
@@ -1,6 +1,7 @@
[{ [
"label": "Simply CPQ", {
"description": "Property Type Group for Simply CPQ", "label": "X-CPQ",
"description": "Property Type Group for X-CPQ",
"propertyTypeGroups": [ "propertyTypeGroups": [
{ {
"label": "electrical", "label": "electrical",
@@ -8,31 +9,81 @@
"propertyTypes": [ "propertyTypes": [
{ {
"label": "Spannungsversorgung (V)", "label": "Spannungsversorgung (V)",
"description": "Spannungsversorgung (V)" "description": "Spannungsversorgung (V)",
"values": [
220,
230
]
}, },
{ {
"label": "Leistung (W)", "label": "Leistung (W)",
"description": "Leistung" "description": "Leistung",
"values": [
0,
140,
130,
120,
110,
100,
90,
80,
70,
60,
50,
28,
26,
24,
22,
20
]
}, },
{ {
"label": "Eingangsimpedanz (Ω)", "label": "Eingangsimpedanz (Ω)",
"description": "Wiederstand der Eingangsimpedanz" "description": "Wiederstand der Eingangsimpedanz",
"values": [
10
]
}, },
{ {
"label": "Frequenzbereich (Hz‑kHz)", "label": "Frequenzbereich (Hz‑kHz)",
"description": "Frequenzbereich (Hz‑kHz)" "description": "Frequenzbereich (Hz‑kHz)",
"values": [
"87‑108"
]
}, },
{ {
"label": "Signal‑Rausch‑Verhältnis (dB)", "label": "Signal‑Rausch‑Verhältnis (dB)",
"description": "Signal‑Rausch‑Verhältnis (dB)" "description": "Signal‑Rausch‑Verhältnis (dB)",
"values": [
48,
46,
47,
45,
49,
44
]
}, },
{ {
"label": "Anschlüsse", "label": "Anschlüsse",
"description": "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"
]
}, },
{ {
"label": "Ausgangsimpedanz (Ω)", "label": "Ausgangsimpedanz (Ω)",
"description": "Ausgangsimpedanz (Ω)" "description": "Ausgangsimpedanz (Ω)",
"values": [
75
]
} }
] ]
}, },
@@ -42,34 +93,90 @@
"propertyTypes": [ "propertyTypes": [
{ {
"label": "Abmessungen (mm)", "label": "Abmessungen (mm)",
"description": "All mechanical properties" "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"
]
}, },
{ {
"label": "Gewicht (kg)", "label": "Gewicht (kg)",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": [
3,
6,
4,
2
]
}, },
{ {
"label": "Kapazität (kg)", "label": "Kapazität (kg)",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": [
0
]
}, },
{ {
"label": "Programms/Features", "label": "Programms/Features",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": []
}, },
{ {
"label": "Wasserverbrauch pro Zyklus (L)", "label": "Wasserverbrauch pro Zyklus (L)",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": []
}, },
{ {
"label": "Material Innenraum", "label": "Material Innenraum",
"description": "All mechanical properties" "description": "All mechanical properties",
} { "values": []
},
{
"label": "Kapazität/Volumen (L)", "label": "Kapazität/Volumen (L)",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": []
}, },
{ {
"label": "Schleuderdrehzahl (U/min)", "label": "Schleuderdrehzahl (U/min)",
"description": "All mechanical properties" "description": "All mechanical properties",
"values": []
} }
] ]
}, },
@@ -79,19 +186,26 @@
"propertyTypes": [ "propertyTypes": [
{ {
"label": "Preis (USD)", "label": "Preis (USD)",
"description": "All other properties" "description": "All other properties",
"values": []
}, },
{ {
"label": "Zusatzfunktionen", "label": "Zusatzfunktionen",
"description": "All other properties" "description": "All other properties",
}, { "values": []
},
{
"label": "Bedienungsart", "label": "Bedienungsart",
"description": "All other properties" "description": "All other properties",
}, { "values": []
},
{
"label": "Energieeffizienzklasse", "label": "Energieeffizienzklasse",
"description": "All other properties" "description": "All other properties",
"values": []
}
]
} }
] ]
} }
] ]
}]
+2 -2
View File
@@ -4,8 +4,8 @@
# password=<databaseUserPassword> dbname=<databaseName> # password=<databaseUserPassword> dbname=<databaseName>
[database] [database]
connection_string = "host=192.168.178.50 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" connection_string = "host=localhost port=5432 user=tsindt password=XD14ko8d dbname=xcpq sslmode=disable"
driver_name = "postgres" driver_name = "postgres"
################################################################ ################################################################
@@ -0,0 +1,52 @@
package repositories
import (
"database/sql"
"xcpq_editor/internal/models"
)
type Import_Repository struct {
db *sql.DB
vr *Value_Repository
pt *Property_Type_Repository
ptg *Property_Types_Group_Repository
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 {
return &Import_Repository{
db: db,
vr: vr,
pt: pt,
ptg: ptg,
pr: pr,
}
}
func (r *Import_Repository) ImportPropertyTypesData(newGroup *models.Property_Types_Group, parentGroup *models.Property_Types_Group) error {
// Implement the import logic here
if newGroup.Id == 0 {
/**
* If the root ID is 0, it means the root property types group is not yet persisted.
* Implement the logic to handle this case, e.g., insert the root group into the database.
*/
group, err := r.ptg.CreatePropertyTypesGroup(newGroup, parentGroup)
if err != nil {
return err
}
newGroup.Id = group.Id
for _, childPropertyType := range newGroup.Property_Types {
_, err := r.pt.CreatePropertyType(&childPropertyType, newGroup, &childPropertyType.Property)
if err != nil {
return err
}
}
for _, childGroup := range newGroup.Property_Types_Groups {
err := r.ImportPropertyTypesData(&childGroup, newGroup)
if err != nil {
return err
}
}
}
return nil
}
@@ -0,0 +1,20 @@
package services
import (
"xcpq_editor/internal/models"
"xcpq_editor/internal/repositories"
)
type Import_Service struct {
importRepository *repositories.Import_Repository
}
func NewImport_Service(importRepository *repositories.Import_Repository) *Import_Service {
return &Import_Service{
importRepository: importRepository,
}
}
func (s *Import_Service) ImportPropertyTypesData(newGroup *models.Property_Types_Group, parentGroup *models.Property_Types_Group) error {
return s.importRepository.ImportPropertyTypesData(newGroup, parentGroup)
}
Binary file not shown.
+329
View File
@@ -0,0 +1,329 @@
--
-- PostgreSQL database dump
--
\restrict GIC3drewyMgulrEtIK7aSkXSq2vxnkXYUQhmWYUZdn3fSeyrHHRbtaWNqN975Kg
-- Dumped from database version 18.4 (Debian 18.4-1.pgdg13+1)
-- Dumped by pg_dump version 18.6
-- Started on 2026-09-13 09:15:21 CEST
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-13 09:15:22 CEST
--
-- PostgreSQL database dump complete
--
\unrestrict GIC3drewyMgulrEtIK7aSkXSq2vxnkXYUQhmWYUZdn3fSeyrHHRbtaWNqN975Kg