feat: add container management functionality

This commit is contained in:
Tran Anh Tuan
2026-05-11 09:42:19 +07:00
parent 9f27436d5d
commit 7c9a0d4670
15 changed files with 1654 additions and 1 deletions

179
sqlc_gen/container.sql.go Normal file
View File

@@ -0,0 +1,179 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: container.sql
package db
import (
"context"
"time"
"github.com/jackc/pgx/v5/pgtype"
)
const createContainer = `-- name: CreateContainer :one
INSERT INTO containers (shelf_id,name,container_type, description,max_capacity,metadata, created_at)
VALUES (
$1,
$2,
$3,
$4,
$5,
$6,
$7
)
RETURNING id, shelf_id, name, container_type, description, max_capacity, metadata, created_at, updated_at
`
type CreateContainerParams struct {
ShelfID int64 `db:"shelf_id" json:"shelfId"`
Name string `db:"name" json:"name"`
ContainerType ContainerTypeEnum `db:"container_type" json:"containerType"`
Description pgtype.Text `db:"description" json:"description"`
MaxCapacity pgtype.Int4 `db:"max_capacity" json:"maxCapacity"`
Metadata []byte `db:"metadata" json:"metadata"`
CreatedAt time.Time `db:"created_at" json:"createdAt"`
}
func (q *Queries) CreateContainer(ctx context.Context, arg CreateContainerParams) (Container, error) {
row := q.db.QueryRow(ctx, createContainer,
arg.ShelfID,
arg.Name,
arg.ContainerType,
arg.Description,
arg.MaxCapacity,
arg.Metadata,
arg.CreatedAt,
)
var i Container
err := row.Scan(
&i.ID,
&i.ShelfID,
&i.Name,
&i.ContainerType,
&i.Description,
&i.MaxCapacity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const deleteContainer = `-- name: DeleteContainer :execrows
DELETE FROM containers
WHERE id = $1
`
func (q *Queries) DeleteContainer(ctx context.Context, id int64) (int64, error) {
result, err := q.db.Exec(ctx, deleteContainer, id)
if err != nil {
return 0, err
}
return result.RowsAffected(), nil
}
const getContainerByID = `-- name: GetContainerByID :one
SELECT id, shelf_id, name, container_type, description, max_capacity, metadata, created_at, updated_at FROM containers
WHERE id = $1
`
func (q *Queries) GetContainerByID(ctx context.Context, id int64) (Container, error) {
row := q.db.QueryRow(ctx, getContainerByID, id)
var i Container
err := row.Scan(
&i.ID,
&i.ShelfID,
&i.Name,
&i.ContainerType,
&i.Description,
&i.MaxCapacity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const listContainers = `-- name: ListContainers :many
SELECT id, shelf_id, name, container_type, description, max_capacity, metadata, created_at, updated_at FROM containers
ORDER BY created_at DESC
`
func (q *Queries) ListContainers(ctx context.Context) ([]Container, error) {
rows, err := q.db.Query(ctx, listContainers)
if err != nil {
return nil, err
}
defer rows.Close()
var items []Container
for rows.Next() {
var i Container
if err := rows.Scan(
&i.ID,
&i.ShelfID,
&i.Name,
&i.ContainerType,
&i.Description,
&i.MaxCapacity,
&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 updateContainer = `-- name: UpdateContainer :one
UPDATE containers
SET name = CASE WHEN $1 = '' THEN name ELSE $1 END,
description = coalesce($2, description),
container_type = coalesce($3, container_type),
max_capacity = coalesce($4, max_capacity),
metadata = coalesce($5, metadata),
updated_at = $6
WHERE id = $7
RETURNING id, shelf_id, name, container_type, description, max_capacity, metadata, created_at, updated_at
`
type UpdateContainerParams struct {
Name interface{} `db:"name" json:"name"`
Description pgtype.Text `db:"description" json:"description"`
ContainerType NullContainerTypeEnum `db:"container_type" json:"containerType"`
MaxCapacity pgtype.Int4 `db:"max_capacity" json:"maxCapacity"`
Metadata []byte `db:"metadata" json:"metadata"`
UpdatedAt time.Time `db:"updated_at" json:"updatedAt"`
ID int64 `db:"id" json:"id"`
}
func (q *Queries) UpdateContainer(ctx context.Context, arg UpdateContainerParams) (Container, error) {
row := q.db.QueryRow(ctx, updateContainer,
arg.Name,
arg.Description,
arg.ContainerType,
arg.MaxCapacity,
arg.Metadata,
arg.UpdatedAt,
arg.ID,
)
var i Container
err := row.Scan(
&i.ID,
&i.ShelfID,
&i.Name,
&i.ContainerType,
&i.Description,
&i.MaxCapacity,
&i.Metadata,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}

View File

@@ -14,17 +14,20 @@ 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)
CreateContainer(ctx context.Context, arg CreateContainerParams) (Container, error)
CreateRole(ctx context.Context, arg CreateRoleParams) (Role, error)
CreateRoom(ctx context.Context, arg CreateRoomParams) (Room, error)
CreateShelve(ctx context.Context, arg CreateShelveParams) (Shelf, error)
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)
DeleteContainer(ctx context.Context, id int64) (int64, error)
DeleteRole(ctx context.Context, id uuid.UUID) (int64, error)
DeleteRoom(ctx context.Context, id int64) (int64, error)
DeleteShelve(ctx context.Context, id int64) (int64, error)
DeleteWarehouse(ctx context.Context, id int64) (int64, error)
GetCabinetByID(ctx context.Context, id int64) (Cabinet, error)
GetContainerByID(ctx context.Context, id int64) (Container, error)
GetRoleByID(ctx context.Context, id uuid.UUID) (Role, error)
GetRoomByID(ctx context.Context, id int64) (Room, error)
GetShelveByID(ctx context.Context, id int64) (Shelf, error)
@@ -36,6 +39,7 @@ type Querier interface {
GetUserRolesByUserID(ctx context.Context, userID uuid.UUID) ([]GetUserRolesByUserIDRow, error)
GetWarehouseByID(ctx context.Context, id int64) (Warehouse, error)
ListCabinets(ctx context.Context) ([]Cabinet, error)
ListContainers(ctx context.Context) ([]Container, error)
ListRoles(ctx context.Context) ([]Role, error)
ListRooms(ctx context.Context) ([]Room, error)
ListShelves(ctx context.Context) ([]Shelf, error)
@@ -43,6 +47,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)
UpdateContainer(ctx context.Context, arg UpdateContainerParams) (Container, error)
UpdateRole(ctx context.Context, arg UpdateRoleParams) (Role, error)
UpdateRoom(ctx context.Context, arg UpdateRoomParams) (Room, error)
UpdateShelve(ctx context.Context, arg UpdateShelveParams) (Shelf, error)