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") }