Files
geo/server/internal/tenant/repository/image_reference_repo.go
T

117 lines
3.4 KiB
Go
Raw Normal View History

2026-04-16 20:40:41 +08:00
package repository
import (
"context"
"time"
"github.com/geo-platform/tenant-api/internal/tenant/repository/generated"
)
type ImageReference struct {
ID int64
TenantID int64
ImageAssetID int64
ArticleID int64
RefScope string
CreatedAt time.Time
}
type ImageReferenceArticle struct {
ArticleID int64
RefScope string
}
type ImageReferenceRepository interface {
List(ctx context.Context, tenantID, imageAssetID int64) ([]ImageReference, error)
Count(ctx context.Context, tenantID, imageAssetID int64) (int, error)
Upsert(ctx context.Context, tenantID, imageAssetID, articleID int64, refScope string) error
DeleteByArticle(ctx context.Context, tenantID, articleID int64) error
DeleteByArticleScope(ctx context.Context, tenantID, articleID int64, refScope string) error
ListArticles(ctx context.Context, tenantID, imageAssetID int64) ([]ImageReferenceArticle, error)
}
type imageReferenceRepository struct {
q generated.Querier
}
func NewImageReferenceRepository(db generated.DBTX) ImageReferenceRepository {
return &imageReferenceRepository{q: newQuerier(db)}
}
func (r *imageReferenceRepository) List(ctx context.Context, tenantID, imageAssetID int64) ([]ImageReference, error) {
rows, err := r.q.ListImageReferences(ctx, generated.ListImageReferencesParams{
TenantID: tenantID,
ImageAssetID: imageAssetID,
})
if err != nil {
return nil, err
}
refs := make([]ImageReference, len(rows))
for i, row := range rows {
refs[i] = ImageReference{
ID: row.ID,
TenantID: row.TenantID,
ImageAssetID: row.ImageAssetID,
ArticleID: row.ArticleID,
RefScope: row.RefScope,
CreatedAt: timeFromTimestamp(row.CreatedAt),
}
}
return refs, nil
}
func (r *imageReferenceRepository) Count(ctx context.Context, tenantID, imageAssetID int64) (int, error) {
total, err := r.q.CountImageReferences(ctx, generated.CountImageReferencesParams{
TenantID: tenantID,
ImageAssetID: imageAssetID,
})
if err != nil {
return 0, err
}
return int(total), nil
}
func (r *imageReferenceRepository) Upsert(ctx context.Context, tenantID, imageAssetID, articleID int64, refScope string) error {
return r.q.UpsertImageReference(ctx, generated.UpsertImageReferenceParams{
TenantID: tenantID,
ImageAssetID: imageAssetID,
ArticleID: articleID,
RefScope: refScope,
})
}
func (r *imageReferenceRepository) DeleteByArticle(ctx context.Context, tenantID, articleID int64) error {
return r.q.DeleteImageReferencesByArticle(ctx, generated.DeleteImageReferencesByArticleParams{
TenantID: tenantID,
ArticleID: articleID,
})
}
func (r *imageReferenceRepository) DeleteByArticleScope(ctx context.Context, tenantID, articleID int64, refScope string) error {
return r.q.DeleteImageReferencesByArticleScope(ctx, generated.DeleteImageReferencesByArticleScopeParams{
TenantID: tenantID,
ArticleID: articleID,
RefScope: refScope,
})
}
func (r *imageReferenceRepository) ListArticles(ctx context.Context, tenantID, imageAssetID int64) ([]ImageReferenceArticle, error) {
rows, err := r.q.ListImageReferenceArticles(ctx, generated.ListImageReferenceArticlesParams{
TenantID: tenantID,
ImageAssetID: imageAssetID,
})
if err != nil {
return nil, err
}
articles := make([]ImageReferenceArticle, len(rows))
for i, row := range rows {
articles[i] = ImageReferenceArticle{
ArticleID: row.ArticleID,
RefScope: row.RefScope,
}
}
return articles, nil
}