mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-04-21 00:50:29 +00:00
60 lines
2.1 KiB
Go
60 lines
2.1 KiB
Go
package pds
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"atcr.io/pkg/atproto"
|
|
)
|
|
|
|
// CreateLayerRecord creates a new layer record in the hold's PDS
|
|
// Returns the rkey and CID of the created record
|
|
func (p *HoldPDS) CreateLayerRecord(ctx context.Context, record *atproto.LayerRecord) (string, string, error) {
|
|
// Validate record
|
|
if record.Type != atproto.LayerCollection {
|
|
return "", "", fmt.Errorf("invalid record type: %s", record.Type)
|
|
}
|
|
|
|
if record.Digest == "" {
|
|
return "", "", fmt.Errorf("digest is required")
|
|
}
|
|
|
|
if record.Size <= 0 {
|
|
return "", "", fmt.Errorf("size must be positive")
|
|
}
|
|
|
|
// Create record with auto-generated TID rkey
|
|
rkey, recordCID, err := p.repomgr.CreateRecord(
|
|
ctx,
|
|
p.uid,
|
|
atproto.LayerCollection,
|
|
record,
|
|
)
|
|
|
|
if err != nil {
|
|
return "", "", fmt.Errorf("failed to create layer record: %w", err)
|
|
}
|
|
|
|
return rkey, recordCID.String(), nil
|
|
}
|
|
|
|
// GetLayerRecord retrieves a specific layer record by rkey
|
|
// Note: This is a simplified implementation. For production, you may need to pass the CID
|
|
func (p *HoldPDS) GetLayerRecord(ctx context.Context, rkey string) (*atproto.LayerRecord, error) {
|
|
// For now, we don't implement this as it's not needed for the manifest post feature
|
|
// Full implementation would require querying the carstore with a specific CID
|
|
return nil, fmt.Errorf("GetLayerRecord not yet implemented - use via XRPC listRecords instead")
|
|
}
|
|
|
|
// ListLayerRecords lists layer records with pagination
|
|
// Returns records, next cursor (empty if no more), and error
|
|
// Note: This is a simplified implementation. For production, consider adding filters
|
|
// (by repository, user, digest, etc.) and proper pagination
|
|
func (p *HoldPDS) ListLayerRecords(ctx context.Context, limit int, cursor string) ([]*atproto.LayerRecord, string, error) {
|
|
// For now, return empty list - full implementation would query the carstore
|
|
// This would require iterating over records in the collection and filtering
|
|
// In practice, layer records are mainly for analytics and Bluesky posts,
|
|
// not for runtime queries
|
|
return nil, "", fmt.Errorf("ListLayerRecords not yet implemented")
|
|
}
|