feat: add components management functionality

This commit is contained in:
Tran Anh Tuan
2026-05-11 10:35:38 +07:00
parent 50564e9b78
commit bf20286f04
15 changed files with 1662 additions and 1 deletions

186
sqlc_gen/component.sql.go Normal file
View File

@@ -0,0 +1,186 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: component.sql
package db
import (
"context"
"time"
"github.com/jackc/pgx/v5/pgtype"
)
const createComponent = `-- name: CreateComponent :one
INSERT INTO components (component_type_id,name, description,unit,min_quantity,metadata, created_at)
VALUES (
$1,
$2,
$3,
$4,
$5,
$6,
$7
)
RETURNING id, component_type_id, name, description, unit, total_quantity, min_quantity, metadata, created_at, updated_at
`
type CreateComponentParams struct {
ComponentTypeID int64 `db:"component_type_id" json:"componentTypeId"`
Name string `db:"name" json:"name"`
Description pgtype.Text `db:"description" json:"description"`
Unit string `db:"unit" json:"unit"`
MinQuantity int32 `db:"min_quantity" json:"minQuantity"`
Metadata []byte `db:"metadata" json:"metadata"`
CreatedAt time.Time `db:"created_at" json:"createdAt"`
}
func (q *Queries) CreateComponent(ctx context.Context, arg CreateComponentParams) (Component, error) {
row := q.db.QueryRow(ctx, createComponent,
arg.ComponentTypeID,
arg.Name,
arg.Description,
arg.Unit,
arg.MinQuantity,
arg.Metadata,
arg.CreatedAt,
)
var i Component
err := row.Scan(
&i.ID,
&i.ComponentTypeID,
&i.Name,
&i.Description,
&i.Unit,
&i.TotalQuantity,
&i.MinQuantity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const deleteComponent = `-- name: DeleteComponent :execrows
DELETE FROM components
WHERE id = $1
`
func (q *Queries) DeleteComponent(ctx context.Context, id int64) (int64, error) {
result, err := q.db.Exec(ctx, deleteComponent, id)
if err != nil {
return 0, err
}
return result.RowsAffected(), nil
}
const getComponentByID = `-- name: GetComponentByID :one
SELECT id, component_type_id, name, description, unit, total_quantity, min_quantity, metadata, created_at, updated_at FROM components
WHERE id = $1
`
func (q *Queries) GetComponentByID(ctx context.Context, id int64) (Component, error) {
row := q.db.QueryRow(ctx, getComponentByID, id)
var i Component
err := row.Scan(
&i.ID,
&i.ComponentTypeID,
&i.Name,
&i.Description,
&i.Unit,
&i.TotalQuantity,
&i.MinQuantity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const listComponents = `-- name: ListComponents :many
SELECT id, component_type_id, name, description, unit, total_quantity, min_quantity, metadata, created_at, updated_at FROM components
ORDER BY created_at DESC
`
func (q *Queries) ListComponents(ctx context.Context) ([]Component, error) {
rows, err := q.db.Query(ctx, listComponents)
if err != nil {
return nil, err
}
defer rows.Close()
var items []Component
for rows.Next() {
var i Component
if err := rows.Scan(
&i.ID,
&i.ComponentTypeID,
&i.Name,
&i.Description,
&i.Unit,
&i.TotalQuantity,
&i.MinQuantity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const updateComponent = `-- name: UpdateComponent :one
UPDATE components
SET name = CASE WHEN $1 = '' THEN name ELSE $1 END,
component_type_id = coalesce($2, component_type_id),
description = coalesce($3, description),
unit = coalesce($4, unit),
min_quantity = coalesce($5, min_quantity),
metadata = coalesce($6, metadata),
updated_at = $7
WHERE id = $8
RETURNING id, component_type_id, name, description, unit, total_quantity, min_quantity, metadata, created_at, updated_at
`
type UpdateComponentParams struct {
Name interface{} `db:"name" json:"name"`
ComponentTypeID int64 `db:"component_type_id" json:"componentTypeId"`
Description pgtype.Text `db:"description" json:"description"`
Unit string `db:"unit" json:"unit"`
MinQuantity int32 `db:"min_quantity" json:"minQuantity"`
Metadata []byte `db:"metadata" json:"metadata"`
UpdatedAt time.Time `db:"updated_at" json:"updatedAt"`
ID int64 `db:"id" json:"id"`
}
func (q *Queries) UpdateComponent(ctx context.Context, arg UpdateComponentParams) (Component, error) {
row := q.db.QueryRow(ctx, updateComponent,
arg.Name,
arg.ComponentTypeID,
arg.Description,
arg.Unit,
arg.MinQuantity,
arg.Metadata,
arg.UpdatedAt,
arg.ID,
)
var i Component
err := row.Scan(
&i.ID,
&i.ComponentTypeID,
&i.Name,
&i.Description,
&i.Unit,
&i.TotalQuantity,
&i.MinQuantity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}

View File

@@ -1,7 +1,7 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: conponent_type.sql
// source: component_type.sql
package db

View File

@@ -14,6 +14,7 @@ type Querier interface {
AssignRoleToUser(ctx context.Context, arg AssignRoleToUserParams) (UserRole, error)
CountUsersByRoleID(ctx context.Context, roleID uuid.UUID) (int64, error)
CreateCabinet(ctx context.Context, arg CreateCabinetParams) (Cabinet, error)
CreateComponent(ctx context.Context, arg CreateComponentParams) (Component, error)
CreateComponentType(ctx context.Context, arg CreateComponentTypeParams) (ComponentType, error)
CreateContainer(ctx context.Context, arg CreateContainerParams) (Container, error)
CreateRole(ctx context.Context, arg CreateRoleParams) (Role, error)
@@ -22,6 +23,7 @@ type Querier interface {
CreateUser(ctx context.Context, arg CreateUserParams) (uuid.UUID, error)
CreateWarehouse(ctx context.Context, arg CreateWarehouseParams) (Warehouse, error)
DeleteCabinet(ctx context.Context, id int64) (int64, error)
DeleteComponent(ctx context.Context, id int64) (int64, error)
DeleteComponentType(ctx context.Context, id int64) (int64, error)
DeleteContainer(ctx context.Context, id int64) (int64, error)
DeleteRole(ctx context.Context, id uuid.UUID) (int64, error)
@@ -29,6 +31,7 @@ type Querier interface {
DeleteShelve(ctx context.Context, id int64) (int64, error)
DeleteWarehouse(ctx context.Context, id int64) (int64, error)
GetCabinetByID(ctx context.Context, id int64) (Cabinet, error)
GetComponentByID(ctx context.Context, id int64) (Component, error)
GetComponentTypeByID(ctx context.Context, id int64) (ComponentType, error)
GetContainerByID(ctx context.Context, id int64) (Container, error)
GetRoleByID(ctx context.Context, id uuid.UUID) (Role, error)
@@ -43,6 +46,7 @@ type Querier interface {
GetWarehouseByID(ctx context.Context, id int64) (Warehouse, error)
ListCabinets(ctx context.Context) ([]Cabinet, error)
ListComponentTypes(ctx context.Context) ([]ComponentType, error)
ListComponents(ctx context.Context) ([]Component, error)
ListContainers(ctx context.Context) ([]Container, error)
ListRoles(ctx context.Context) ([]Role, error)
ListRooms(ctx context.Context) ([]Room, error)
@@ -51,6 +55,7 @@ type Querier interface {
RemoveAllRolesFromUser(ctx context.Context, userID uuid.UUID) error
RemoveRoleFromUser(ctx context.Context, arg RemoveRoleFromUserParams) error
UpdateCabinet(ctx context.Context, arg UpdateCabinetParams) (Cabinet, error)
UpdateComponent(ctx context.Context, arg UpdateComponentParams) (Component, error)
UpdateComponentType(ctx context.Context, arg UpdateComponentTypeParams) (ComponentType, error)
UpdateContainer(ctx context.Context, arg UpdateContainerParams) (Container, error)
UpdateRole(ctx context.Context, arg UpdateRoleParams) (Role, error)