feat: implement component-item management with CRUD operations and status updates
This commit is contained in:
75
db/queries/component_item.sql
Normal file
75
db/queries/component_item.sql
Normal file
@@ -0,0 +1,75 @@
|
||||
-- name: GetComponentItemByID :one
|
||||
SELECT * FROM component_items
|
||||
WHERE id = sqlc.arg(id);
|
||||
|
||||
-- name: ListComponentItems :many
|
||||
SELECT * FROM component_items
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: CreateComponentItem :one
|
||||
INSERT INTO component_items (component_id,container_id,quantity, status, metadata, created_at)
|
||||
VALUES (
|
||||
sqlc.arg(component_id),
|
||||
sqlc.arg(container_id),
|
||||
sqlc.arg(quantity),
|
||||
sqlc.arg(status),
|
||||
sqlc.arg(metadata),
|
||||
sqlc.arg(created_at)
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: UpdateComponentItem :one
|
||||
UPDATE component_items
|
||||
SET component_id = CASE WHEN sqlc.arg(component_id) = '' THEN component_id ELSE sqlc.arg(component_id) END,
|
||||
container_id = CASE WHEN sqlc.arg(container_id) = '' THEN container_id ELSE sqlc.arg(container_id) END,
|
||||
metadata = coalesce(sqlc.arg(metadata), metadata),
|
||||
updated_at = sqlc.arg(updated_at)
|
||||
WHERE id = sqlc.arg(id)
|
||||
RETURNING *;
|
||||
|
||||
-- name: DeleteComponentItem :execrows
|
||||
DELETE FROM component_items
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: UpdateComponentItemStatus :one
|
||||
UPDATE component_items
|
||||
SET status = sqlc.arg(status),
|
||||
updated_at = sqlc.arg(updated_at)
|
||||
WHERE id = sqlc.arg(id)
|
||||
RETURNING *;
|
||||
|
||||
-- name: UpdateComponentItemQuantity :one
|
||||
UPDATE component_items
|
||||
SET quantity = sqlc.arg(quantity),
|
||||
updated_at = sqlc.arg(updated_at)
|
||||
WHERE id = sqlc.arg(id)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetComponentItemByComponentContainerStatus :one
|
||||
SELECT * FROM component_items
|
||||
WHERE component_id = sqlc.arg(component_id)
|
||||
AND container_id = sqlc.arg(container_id)
|
||||
AND status = sqlc.arg(status);
|
||||
|
||||
-- name: FindComponentItem :many
|
||||
SELECT
|
||||
c.name AS component_name,
|
||||
ct.name AS type_name,
|
||||
ci.quantity,
|
||||
ci.status,
|
||||
cn.name AS container_name,
|
||||
cn.container_type,
|
||||
s.name AS shelf_name,
|
||||
cb.name AS cabinet_name,
|
||||
r.name AS room_name,
|
||||
w.name AS warehouse_name
|
||||
FROM component_items ci
|
||||
JOIN components c ON ci.component_id = c.id
|
||||
JOIN component_types ct ON c.component_type_id = ct.id
|
||||
JOIN containers cn ON ci.container_id = cn.id
|
||||
JOIN shelves s ON cn.shelf_id = s.id
|
||||
JOIN cabinets cb ON s.cabinet_id = cb.id
|
||||
JOIN rooms r ON cb.room_id = r.id
|
||||
JOIN warehouses w ON r.warehouse_id = w.id
|
||||
WHERE ci.component_id = sqlc.arg(componentId) AND ci.quantity > 0;
|
||||
|
||||
15
db/queries/component_status_history.sql
Normal file
15
db/queries/component_status_history.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- name: CreateComponentStatusHistory :one
|
||||
INSERT INTO component_status_history (
|
||||
component_item_id, old_status, new_status,
|
||||
changed_quantity, note, changed_by, changed_at
|
||||
)
|
||||
VALUES (
|
||||
sqlc.arg(component_item_id),
|
||||
sqlc.arg(old_status),
|
||||
sqlc.arg(new_status),
|
||||
sqlc.arg(changed_quantity),
|
||||
sqlc.arg(note),
|
||||
sqlc.arg(changed_by),
|
||||
sqlc.arg(changed_at)
|
||||
)
|
||||
RETURNING *;
|
||||
Reference in New Issue
Block a user