fix: Code for category
This commit is contained in:
@@ -20,21 +20,21 @@ func NewCategoryRepository(pool *pgxpool.Pool) *CategoryRepository {
|
||||
return &CategoryRepository{pool: pool}
|
||||
}
|
||||
|
||||
const categoryColumns = `id, parent_id, name, description, created_at, updated_at`
|
||||
const categoryColumns = `id, parent_id, code, name, description, created_at, updated_at`
|
||||
|
||||
func scanCategory(row pgx.Row) (domain.Category, error) {
|
||||
var c domain.Category
|
||||
err := row.Scan(&c.ID, &c.ParentID, &c.Name, &c.Description, &c.CreatedAt, &c.UpdatedAt)
|
||||
err := row.Scan(&c.ID, &c.ParentID, &c.Code, &c.Name, &c.Description, &c.CreatedAt, &c.UpdatedAt)
|
||||
return c, err
|
||||
}
|
||||
|
||||
// Create inserts a new category and returns the stored row.
|
||||
func (r *CategoryRepository) Create(ctx context.Context, c domain.Category) (domain.Category, error) {
|
||||
row := r.pool.QueryRow(ctx,
|
||||
`INSERT INTO categories (parent_id, name, description)
|
||||
VALUES ($1, $2, $3)
|
||||
`INSERT INTO categories (parent_id, code, name, description)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING `+categoryColumns,
|
||||
c.ParentID, c.Name, c.Description,
|
||||
c.ParentID, c.Code, c.Name, c.Description,
|
||||
)
|
||||
out, err := scanCategory(row)
|
||||
return out, mapError(err)
|
||||
@@ -48,6 +48,14 @@ func (r *CategoryRepository) GetByID(ctx context.Context, id uuid.UUID) (domain.
|
||||
return out, mapError(err)
|
||||
}
|
||||
|
||||
// GetByCode returns the category with the given code, or domain.ErrNotFound.
|
||||
func (r *CategoryRepository) GetByCode(ctx context.Context, code string) (domain.Category, error) {
|
||||
row := r.pool.QueryRow(ctx,
|
||||
`SELECT `+categoryColumns+` FROM categories WHERE code = $1`, code)
|
||||
out, err := scanCategory(row)
|
||||
return out, mapError(err)
|
||||
}
|
||||
|
||||
// List returns categories ordered by name. When parentID is non-nil it filters
|
||||
// to that parent's direct children; otherwise it returns all categories.
|
||||
func (r *CategoryRepository) List(ctx context.Context, parentID *uuid.UUID) ([]domain.Category, error) {
|
||||
@@ -82,10 +90,10 @@ func (r *CategoryRepository) List(ctx context.Context, parentID *uuid.UUID) ([]d
|
||||
func (r *CategoryRepository) Update(ctx context.Context, c domain.Category) (domain.Category, error) {
|
||||
row := r.pool.QueryRow(ctx,
|
||||
`UPDATE categories
|
||||
SET parent_id = $2, name = $3, description = $4, updated_at = now()
|
||||
SET parent_id = $2, code = $3, name = $4, description = $5, updated_at = now()
|
||||
WHERE id = $1
|
||||
RETURNING `+categoryColumns,
|
||||
c.ID, c.ParentID, c.Name, c.Description,
|
||||
c.ID, c.ParentID, c.Code, c.Name, c.Description,
|
||||
)
|
||||
out, err := scanCategory(row)
|
||||
return out, mapError(err)
|
||||
|
||||
@@ -26,7 +26,7 @@ func NewDatasetRepository(pool *pgxpool.Pool) *DatasetRepository {
|
||||
// datasetColumns lists the dataset columns for SELECT and RETURNING. The
|
||||
// geometry is exposed as GeoJSON (jsonb) rather than its raw EWKB form, and a
|
||||
// bounding box array is derived for raster datasets only.
|
||||
const datasetColumns = `id, category_id, code, name, description, unit, filename, storage_key, cog_storage_key, file_type, size_bytes, content_type, properties, meta, automated, status, attribute_columns, kato_column, year_columns, parse_error, ST_AsGeoJSON(geometry)::jsonb AS geometry,
|
||||
const datasetColumns = `id, category_id, name, description, unit, filename, storage_key, cog_storage_key, file_type, size_bytes, content_type, properties, meta, automated, status, attribute_columns, kato_column, year_columns, parse_error, ST_AsGeoJSON(geometry)::jsonb AS geometry,
|
||||
CASE WHEN file_type = 'raster' AND geometry IS NOT NULL
|
||||
THEN ARRAY[ST_XMin(geometry), ST_YMin(geometry), ST_XMax(geometry), ST_YMax(geometry)]
|
||||
ELSE NULL END AS bbox,
|
||||
@@ -35,7 +35,7 @@ const datasetColumns = `id, category_id, code, name, description, unit, filename
|
||||
func scanDataset(row pgx.Row) (domain.Dataset, error) {
|
||||
var d domain.Dataset
|
||||
err := row.Scan(
|
||||
&d.ID, &d.CategoryID, &d.Code, &d.Name, &d.Description, &d.Unit,
|
||||
&d.ID, &d.CategoryID, &d.Name, &d.Description, &d.Unit,
|
||||
&d.Filename, &d.StorageKey, &d.CogStorageKey, &d.FileType, &d.SizeBytes, &d.ContentType,
|
||||
&d.Properties, &d.Meta, &d.Automated, &d.Status,
|
||||
&d.AttributeColumns, &d.KatoColumn, &d.YearColumns, &d.ParseError,
|
||||
@@ -56,10 +56,10 @@ func nullableJSON(raw json.RawMessage) any {
|
||||
// Create inserts a new dataset and returns the stored row.
|
||||
func (r *DatasetRepository) Create(ctx context.Context, d domain.Dataset) (domain.Dataset, error) {
|
||||
row := r.pool.QueryRow(ctx,
|
||||
`INSERT INTO datasets (category_id, code, name, description, unit, filename, storage_key, file_type, size_bytes, content_type, properties, meta, automated, status)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
|
||||
`INSERT INTO datasets (category_id, name, description, unit, filename, storage_key, file_type, size_bytes, content_type, properties, meta, automated, status)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)
|
||||
RETURNING `+datasetColumns,
|
||||
d.CategoryID, d.Code, d.Name, d.Description, d.Unit, d.Filename, d.StorageKey, d.FileType, d.SizeBytes, d.ContentType,
|
||||
d.CategoryID, d.Name, d.Description, d.Unit, d.Filename, d.StorageKey, d.FileType, d.SizeBytes, d.ContentType,
|
||||
nullableJSON(d.Properties), nullableJSON(d.Meta), d.Automated, d.Status,
|
||||
)
|
||||
out, err := scanDataset(row)
|
||||
@@ -269,12 +269,12 @@ func (r *DatasetRepository) GetByID(ctx context.Context, id uuid.UUID) (domain.D
|
||||
return out, mapError(err)
|
||||
}
|
||||
|
||||
const datasetSummaryColumns = `id, category_id, code, name, description, unit, file_type, size_bytes, status, created_at, updated_at`
|
||||
const datasetSummaryColumns = `id, category_id, name, description, unit, file_type, size_bytes, status, created_at, updated_at`
|
||||
|
||||
func scanDatasetSummary(row pgx.Row) (domain.DatasetSummary, error) {
|
||||
var d domain.DatasetSummary
|
||||
err := row.Scan(
|
||||
&d.ID, &d.CategoryID, &d.Code, &d.Name, &d.Description, &d.Unit,
|
||||
&d.ID, &d.CategoryID, &d.Name, &d.Description, &d.Unit,
|
||||
&d.FileType, &d.SizeBytes, &d.Status, &d.CreatedAt, &d.UpdatedAt,
|
||||
)
|
||||
return d, err
|
||||
|
||||
Reference in New Issue
Block a user