feat: add image management functionality
- Implemented image folder repository with CRUD operations. - Added image reference repository for managing image references to articles. - Created image repository for handling image assets, including listing, inserting, updating, and deleting images. - Introduced image usage repository to track storage usage and quotas for tenants. - Added SQL queries for image assets, folders, references, and usage. - Developed image handler for HTTP endpoints to manage images and folders. - Created database migration scripts for image-related tables and structures.
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: image_reference.sql
|
||||
|
||||
package generated
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
)
|
||||
|
||||
const countImageReferences = `-- name: CountImageReferences :one
|
||||
SELECT COUNT(*)::INT AS total
|
||||
FROM image_asset_references
|
||||
WHERE tenant_id = $1 AND image_asset_id = $2
|
||||
`
|
||||
|
||||
type CountImageReferencesParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ImageAssetID int64 `json:"image_asset_id"`
|
||||
}
|
||||
|
||||
func (q *Queries) CountImageReferences(ctx context.Context, arg CountImageReferencesParams) (int32, error) {
|
||||
row := q.db.QueryRow(ctx, countImageReferences, arg.TenantID, arg.ImageAssetID)
|
||||
var total int32
|
||||
err := row.Scan(&total)
|
||||
return total, err
|
||||
}
|
||||
|
||||
const deleteImageReferencesByArticle = `-- name: DeleteImageReferencesByArticle :exec
|
||||
DELETE FROM image_asset_references
|
||||
WHERE tenant_id = $1 AND article_id = $2
|
||||
`
|
||||
|
||||
type DeleteImageReferencesByArticleParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ArticleID int64 `json:"article_id"`
|
||||
}
|
||||
|
||||
func (q *Queries) DeleteImageReferencesByArticle(ctx context.Context, arg DeleteImageReferencesByArticleParams) error {
|
||||
_, err := q.db.Exec(ctx, deleteImageReferencesByArticle, arg.TenantID, arg.ArticleID)
|
||||
return err
|
||||
}
|
||||
|
||||
const deleteImageReferencesByArticleScope = `-- name: DeleteImageReferencesByArticleScope :exec
|
||||
DELETE FROM image_asset_references
|
||||
WHERE tenant_id = $1 AND article_id = $2 AND ref_scope = $3
|
||||
`
|
||||
|
||||
type DeleteImageReferencesByArticleScopeParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ArticleID int64 `json:"article_id"`
|
||||
RefScope string `json:"ref_scope"`
|
||||
}
|
||||
|
||||
func (q *Queries) DeleteImageReferencesByArticleScope(ctx context.Context, arg DeleteImageReferencesByArticleScopeParams) error {
|
||||
_, err := q.db.Exec(ctx, deleteImageReferencesByArticleScope, arg.TenantID, arg.ArticleID, arg.RefScope)
|
||||
return err
|
||||
}
|
||||
|
||||
const listImageReferenceArticles = `-- name: ListImageReferenceArticles :many
|
||||
SELECT DISTINCT r.article_id, r.ref_scope
|
||||
FROM image_asset_references r
|
||||
WHERE r.tenant_id = $1 AND r.image_asset_id = $2
|
||||
`
|
||||
|
||||
type ListImageReferenceArticlesParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ImageAssetID int64 `json:"image_asset_id"`
|
||||
}
|
||||
|
||||
type ListImageReferenceArticlesRow struct {
|
||||
ArticleID int64 `json:"article_id"`
|
||||
RefScope string `json:"ref_scope"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListImageReferenceArticles(ctx context.Context, arg ListImageReferenceArticlesParams) ([]ListImageReferenceArticlesRow, error) {
|
||||
rows, err := q.db.Query(ctx, listImageReferenceArticles, arg.TenantID, arg.ImageAssetID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListImageReferenceArticlesRow
|
||||
for rows.Next() {
|
||||
var i ListImageReferenceArticlesRow
|
||||
if err := rows.Scan(&i.ArticleID, &i.RefScope); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listImageReferences = `-- name: ListImageReferences :many
|
||||
SELECT r.id, r.tenant_id, r.image_asset_id, r.article_id, r.ref_scope, r.created_at
|
||||
FROM image_asset_references r
|
||||
WHERE r.tenant_id = $1 AND r.image_asset_id = $2
|
||||
`
|
||||
|
||||
type ListImageReferencesParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ImageAssetID int64 `json:"image_asset_id"`
|
||||
}
|
||||
|
||||
type ListImageReferencesRow struct {
|
||||
ID int64 `json:"id"`
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ImageAssetID int64 `json:"image_asset_id"`
|
||||
ArticleID int64 `json:"article_id"`
|
||||
RefScope string `json:"ref_scope"`
|
||||
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
||||
}
|
||||
|
||||
func (q *Queries) ListImageReferences(ctx context.Context, arg ListImageReferencesParams) ([]ListImageReferencesRow, error) {
|
||||
rows, err := q.db.Query(ctx, listImageReferences, arg.TenantID, arg.ImageAssetID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListImageReferencesRow
|
||||
for rows.Next() {
|
||||
var i ListImageReferencesRow
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.TenantID,
|
||||
&i.ImageAssetID,
|
||||
&i.ArticleID,
|
||||
&i.RefScope,
|
||||
&i.CreatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const upsertImageReference = `-- name: UpsertImageReference :exec
|
||||
INSERT INTO image_asset_references (tenant_id, image_asset_id, article_id, ref_scope)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
ON CONFLICT (image_asset_id, article_id, ref_scope) DO UPDATE SET updated_at = NOW()
|
||||
`
|
||||
|
||||
type UpsertImageReferenceParams struct {
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
ImageAssetID int64 `json:"image_asset_id"`
|
||||
ArticleID int64 `json:"article_id"`
|
||||
RefScope string `json:"ref_scope"`
|
||||
}
|
||||
|
||||
func (q *Queries) UpsertImageReference(ctx context.Context, arg UpsertImageReferenceParams) error {
|
||||
_, err := q.db.Exec(ctx, upsertImageReference,
|
||||
arg.TenantID,
|
||||
arg.ImageAssetID,
|
||||
arg.ArticleID,
|
||||
arg.RefScope,
|
||||
)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user