diff --git a/.sqlx/query-02438c29c249ce2b446d15a41d07c40ce73946e62744a486cbbac256c4a4cf55.json b/.sqlx/query-02438c29c249ce2b446d15a41d07c40ce73946e62744a486cbbac256c4a4cf55.json
new file mode 100644
index 0000000..69bc7e1
--- /dev/null
+++ b/.sqlx/query-02438c29c249ce2b446d15a41d07c40ce73946e62744a486cbbac256c4a4cf55.json
@@ -0,0 +1,34 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT items.id, items.name, item_classes.name AS \"class_name\"\n FROM items\n JOIN item_classes\n ON items.class = item_classes.id\n WHERE items.original_packaging = $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "name",
+ "type_info": "Varchar"
+ },
+ {
+ "ordinal": 2,
+ "name": "class_name",
+ "type_info": "Varchar"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Uuid"
+ ]
+ },
+ "nullable": [
+ false,
+ true,
+ false
+ ]
+ },
+ "hash": "02438c29c249ce2b446d15a41d07c40ce73946e62744a486cbbac256c4a4cf55"
+}
diff --git a/.sqlx/query-2e9619ce6db1047e2f5447c4925f28fd05f18706f70220b6ebb7354d2a0a9e3b.json b/.sqlx/query-2e9619ce6db1047e2f5447c4925f28fd05f18706f70220b6ebb7354d2a0a9e3b.json
deleted file mode 100644
index bd6f7f3..0000000
--- a/.sqlx/query-2e9619ce6db1047e2f5447c4925f28fd05f18706f70220b6ebb7354d2a0a9e3b.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "db_name": "PostgreSQL",
- "query": "SELECT * FROM items WHERE parent = $1",
- "describe": {
- "columns": [
- {
- "ordinal": 0,
- "name": "id",
- "type_info": "Uuid"
- },
- {
- "ordinal": 1,
- "name": "name",
- "type_info": "Varchar"
- },
- {
- "ordinal": 2,
- "name": "parent",
- "type_info": "Uuid"
- },
- {
- "ordinal": 3,
- "name": "class",
- "type_info": "Uuid"
- },
- {
- "ordinal": 4,
- "name": "created_at",
- "type_info": "Timestamptz"
- },
- {
- "ordinal": 5,
- "name": "short_id",
- "type_info": "Int4"
- },
- {
- "ordinal": 6,
- "name": "original_packaging",
- "type_info": "Uuid"
- },
- {
- "ordinal": 7,
- "name": "description",
- "type_info": "Varchar"
- }
- ],
- "parameters": {
- "Left": [
- "Uuid"
- ]
- },
- "nullable": [
- false,
- true,
- true,
- false,
- false,
- false,
- true,
- false
- ]
- },
- "hash": "2e9619ce6db1047e2f5447c4925f28fd05f18706f70220b6ebb7354d2a0a9e3b"
-}
diff --git a/.sqlx/query-460f15b3c5ec2774c237fc581166bf44ecdb0b6145f8abba155478643a474125.json b/.sqlx/query-460f15b3c5ec2774c237fc581166bf44ecdb0b6145f8abba155478643a474125.json
new file mode 100644
index 0000000..25af06d
--- /dev/null
+++ b/.sqlx/query-460f15b3c5ec2774c237fc581166bf44ecdb0b6145f8abba155478643a474125.json
@@ -0,0 +1,28 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT id AS \"id?\", to_char(short_id, '000000') AS \"short_id?\"\n FROM items\n WHERE id = ANY ($1)",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id?",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "short_id?",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "UuidArray"
+ ]
+ },
+ "nullable": [
+ false,
+ null
+ ]
+ },
+ "hash": "460f15b3c5ec2774c237fc581166bf44ecdb0b6145f8abba155478643a474125"
+}
diff --git a/.sqlx/query-482df01f0509cc8ec18ffe1caea8f65f11c170b67424e35697540ae12e577227.json b/.sqlx/query-482df01f0509cc8ec18ffe1caea8f65f11c170b67424e35697540ae12e577227.json
new file mode 100644
index 0000000..a35d951
--- /dev/null
+++ b/.sqlx/query-482df01f0509cc8ec18ffe1caea8f65f11c170b67424e35697540ae12e577227.json
@@ -0,0 +1,34 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT items.id, items.name, item_classes.name AS \"class_name\"\n FROM items\n JOIN item_classes\n ON items.class = item_classes.id\n WHERE items.class = $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "name",
+ "type_info": "Varchar"
+ },
+ {
+ "ordinal": 2,
+ "name": "class_name",
+ "type_info": "Varchar"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Uuid"
+ ]
+ },
+ "nullable": [
+ false,
+ true,
+ false
+ ]
+ },
+ "hash": "482df01f0509cc8ec18ffe1caea8f65f11c170b67424e35697540ae12e577227"
+}
diff --git a/.sqlx/query-4ed0c3101202abc920d81ee6acdaff9ed698f585df5e798d1f42206042e31a1b.json b/.sqlx/query-4ed0c3101202abc920d81ee6acdaff9ed698f585df5e798d1f42206042e31a1b.json
new file mode 100644
index 0000000..9ee3865
--- /dev/null
+++ b/.sqlx/query-4ed0c3101202abc920d81ee6acdaff9ed698f585df5e798d1f42206042e31a1b.json
@@ -0,0 +1,28 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT id, name FROM item_classes WHERE parent = $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "name",
+ "type_info": "Varchar"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Uuid"
+ ]
+ },
+ "nullable": [
+ false,
+ false
+ ]
+ },
+ "hash": "4ed0c3101202abc920d81ee6acdaff9ed698f585df5e798d1f42206042e31a1b"
+}
diff --git a/.sqlx/query-53be3ef02ba8b3deb3a74b184a4eb93e01fd0983c19aff3fca67bdc0afab4f37.json b/.sqlx/query-53be3ef02ba8b3deb3a74b184a4eb93e01fd0983c19aff3fca67bdc0afab4f37.json
new file mode 100644
index 0000000..739ccba
--- /dev/null
+++ b/.sqlx/query-53be3ef02ba8b3deb3a74b184a4eb93e01fd0983c19aff3fca67bdc0afab4f37.json
@@ -0,0 +1,26 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO items (name, parent, class, original_packaging, description)\n VALUES ($1, $2, $3, $4, $5)\n RETURNING id",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Varchar",
+ "Uuid",
+ "Uuid",
+ "Uuid",
+ "Varchar"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "53be3ef02ba8b3deb3a74b184a4eb93e01fd0983c19aff3fca67bdc0afab4f37"
+}
diff --git a/.sqlx/query-58969747bdccae4a2d3ad8d8117aa92283151d67f52fbb22e5d976b1c6a5c367.json b/.sqlx/query-58969747bdccae4a2d3ad8d8117aa92283151d67f52fbb22e5d976b1c6a5c367.json
deleted file mode 100644
index eb09468..0000000
--- a/.sqlx/query-58969747bdccae4a2d3ad8d8117aa92283151d67f52fbb22e5d976b1c6a5c367.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "db_name": "PostgreSQL",
- "query": "SELECT * FROM items ORDER BY created_at",
- "describe": {
- "columns": [
- {
- "ordinal": 0,
- "name": "id",
- "type_info": "Uuid"
- },
- {
- "ordinal": 1,
- "name": "name",
- "type_info": "Varchar"
- },
- {
- "ordinal": 2,
- "name": "parent",
- "type_info": "Uuid"
- },
- {
- "ordinal": 3,
- "name": "class",
- "type_info": "Uuid"
- },
- {
- "ordinal": 4,
- "name": "created_at",
- "type_info": "Timestamptz"
- },
- {
- "ordinal": 5,
- "name": "short_id",
- "type_info": "Int4"
- },
- {
- "ordinal": 6,
- "name": "original_packaging",
- "type_info": "Uuid"
- },
- {
- "ordinal": 7,
- "name": "description",
- "type_info": "Varchar"
- }
- ],
- "parameters": {
- "Left": []
- },
- "nullable": [
- false,
- true,
- true,
- false,
- false,
- false,
- true,
- false
- ]
- },
- "hash": "58969747bdccae4a2d3ad8d8117aa92283151d67f52fbb22e5d976b1c6a5c367"
-}
diff --git a/.sqlx/query-5dac9aa215abdc07cda1f4d46db4bcafec45b6264efcb8a175580a71e48c7421.json b/.sqlx/query-5dac9aa215abdc07cda1f4d46db4bcafec45b6264efcb8a175580a71e48c7421.json
new file mode 100644
index 0000000..5dd6dbf
--- /dev/null
+++ b/.sqlx/query-5dac9aa215abdc07cda1f4d46db4bcafec45b6264efcb8a175580a71e48c7421.json
@@ -0,0 +1,56 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n WITH RECURSIVE cte AS (\n SELECT\n id,\n ARRAY[]::UUID[] AS parents,\n ARRAY[]::VARCHAR[] AS parent_names,\n ARRAY[]::VARCHAR[] AS parent_class_names\n FROM items\n WHERE parent IS NULL\n\n UNION\n\n SELECT\n items.id,\n cte.parents || items.parent,\n cte.parent_names || items.name,\n cte.parent_class_names || item_classes.name\n FROM items\n JOIN cte\n ON items.parent = cte.id\n JOIN item_classes\n ON items.class = item_classes.id\n )\n SELECT\n cte.id AS \"id!\",\n items.name,\n items.class,\n item_classes.name AS \"class_name\",\n cte.parents AS \"parents!\",\n cte.parent_names AS \"parent_names!: Vec