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 }